Linux - Simulacion de Caja con Multiproceso

   
Vista:
Imágen de perfil de Tamara

Simulacion de Caja con Multiproceso

Publicado por Tamara (2 intervenciones) el 20/01/2016 00:27:30
Hola chicos :) !!!!!

Quiero pedirle su ayuda, tengo que presentar un trabajo para la Universidad con multiprocesos. Debo simular una caja con una sala de espera de 6 personas y que el programa me diga quien está en la caja y a que hora ingresó y a que hora salió esto, debo hacerlo con hilos y semaforos.
Plis necesito de su ayuda se los agradeceré de todo corazón
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-1
Responder
Imágen de perfil de xve

Simulacion de Caja con Multiproceso

Publicado por xve (662 intervenciones) el 20/01/2016 08:01:51
Hola Tamara, en que lenguaje?? que parte llevas realizada?? donde tiene el problema??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Simulacion de Caja con Multiproceso

Publicado por Tamara (2 intervenciones) el 20/01/2016 21:16:40
en C debo hacerlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Simulacion de Caja con Multiproceso

Publicado por Tom (339 intervenciones) el 20/01/2016 11:10:41
Con un poco de suerte aprenderás algo mientras tratas de averiguar qué hace y por qué:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <semaphore.h>
#include <pthread.h>
#include <string.h>	// memmove()
 
int	cola[1024], counter;
sem_t	sem_caja, sem_cola;
 
/* */
int extract_user() {
	int user;
 
	sem_wait(&sem_caja);
        sem_wait(&sem_cola);
 
	user = cola[0];
	memmove(&cola, &cola[1], 1023);
	cola[1023] = -1;
 
	sem_post(&sem_cola);
	return user;
}
/* */
int insert_user() {
	int i;
	sem_wait(&sem_cola);
	for(i = 0; i < 1024; i++) {
		if(cola[i] < 0) {
			cola[i] = ++counter;
			printf("Nuevo usuario num %d en pos %d de la cola\n", counter, i);
			break;
		}
	}
	sem_post(&sem_cola);
	sem_post(&sem_caja);
 
	if(i >= 1023) {
		printf("La cola está a tope, la cerramos permanentemente.\n");
		return(1);
	}
	return 0;
}
/* */
void* caja(void *data) {
	int secs;
 
	while(1) {
		int user = extract_user();
		printf("Usuario num %d pasa a caja\n", user);
		secs = (rand() % 10) + 5;
		sleep(secs);
		printf("Usuario num %d finaliza\n", user);
	}
}
 
/* */
int main(int argc, char *argv[]) {
	int secs;
	pthread_t t_caja;
 
	srand(time(NULL));
	sem_init(&sem_caja, 0, 0);
	sem_init(&sem_cola, 0, 1);
 
	for(int i = 0; i < 1024; i++) {
		cola[i] = -1;
	}
	counter = 0;
 
	pthread_create(&t_caja, NULL, caja, NULL);
	while(1) {
		secs = (rand() % 20) + 2;
		sleep(secs);
		if(insert_user())
			break;
	}
	pthread_join(t_caja, NULL);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar