2 * Leandro Lucarella (77891)
4 * Ejercicio 2.2.1. Implementa productor-consumidor con colas de mensajes.
11 #include <sys/types.h>
19 /// Clave de nuestro segmento shm y semaforo
20 #define MSG_KEY 0x77891225
22 void msgbuf_init(msgbuf* m, char val)
28 void msgbuf_set(msgbuf* m, char val)
33 char msgbuf_get(msgbuf* m)
38 /// Nombres de los procesos
39 enum proc_t { PRODUCTOR, CONSUMIDOR };
41 void producir(int que_id)
45 msgbuf_init(&msg, val);
46 msgsnd(que_id, &msg, 1, 0);
47 cout << "Producido " << (int)val << endl;
50 void consumir(int que_id)
53 msgrcv(que_id, &msg, 1, 1, 0);
54 cout << "Consumido " << (int)msg.mtext[0] << endl;
57 int main(int argc, char *argv[])
61 cerr << "Faltan parametros: " << argv[0] << " N [max_iter]\n";
64 proc_t proc = (proc_t) atoi(argv[1]);
70 // crea solo si es el proceso 0
71 que_id = msgget(MSG_KEY, (proc ? 0 : IPC_CREAT) | 0666);
73 while (proc == CONSUMIDOR && que_id == -1);
77 // Maxima cantidad de iteraciones (puede venir por parametro)
80 max_iter = atoi(argv[2]);
83 for (int i = 0; i < max_iter; ++i)
85 if (proc == PRODUCTOR)
89 sched_yield(); // Para que se entrelacen mejor
95 // vim: set et sw=4 sts=4 :