#include #include #include #include #include #include /* mnemonici in mode */ #include /* mnemonici in oflag */ #include #include #define BUF_SIZE 5 int main () { int fd, i, pid, size=(BUF_SIZE+1)*sizeof(float); int* nr_lett; float* buffer; sem_t* mutex; sem_t* db; float value[10]; double x; srand(time(0)); mutex=sem_open("mutex", O_EXCL, S_IRUSR | S_IWUSR, 1); /* attacco i semafori */ db=sem_open("db", O_EXCL, S_IRUSR | S_IWUSR, 1); fd = shm_open("mymem", O_EXCL |O_RDWR, S_IRUSR | S_IWUSR); /* attacco la memoria condivisa */ ftruncate(fd,size); buffer = mmap(NULL ,size,PROT_READ | PROT_WRITE, MAP_SHARED ,fd, 0); nr_lett = (int*)(buffer+BUF_SIZE); sem_wait(mutex);/*entro nella sezione critica*/ printf("sono il lettore %d, sto entrando \n",*nr_lett); (*nr_lett)++; if(*nr_lett == 1) sem_wait(db); sem_post(mutex);/*esco dalla sezione critica*/ for(i=0;i