#include /* For O_* constants */ #include /* For mode constants */ #include #include #include #include #include #include using namespace std; static void usage(const char*); static void fumador(const char *, sem_t *, sem_t *); int main(int argc, char *argv[]) { if (argc != 3) usage(argv[0]); sem_t *espera = sem_open(argv[1], 0); if (espera == nullptr) { cerr << "Error abriendo " << argv[1] << " semaforo: " << strerror(errno) << endl; } sem_t *esperaagente = sem_open(argv[2], 0); if (espera == nullptr) { cerr << "Error abriendo " << argv[1] << " semaforo: " << strerror(errno) << endl; } fumador(argv[1], espera, esperaagente); return EXIT_SUCCESS; } static void usage(const char* progname) { cerr << "Uso: " << progname << " " << endl; exit(EXIT_FAILURE); } static void fumador(const char *nombre, sem_t *espera, sem_t *esperaagente) { for (;;) { sem_wait(espera); cerr << "Fumador: " << nombre << " fumando" << endl; sleep(rand() % 10); sem_post(esperaagente); } }