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