Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //i%2==0 reader else writer
- for(i=0; i<20; i++) {
- switch(fork()) {
- case 0:
- switch(i%2) {
- case 0://reader
- while(semctl(sem_mutex, 0, GETVAL) != 1); //wait(mutex)
- if(writers > 0 || readers == 0) {
- semctl(sem_mutex, 0, SETVAL, 1); //signal(mutex)
- while(semctl(sem_resource, 0, GETVAL) != 1); //wait(mutex)
- while(semctl(sem_mutex, 0, GETVAL) != 1); //wait(mutex)
- }
- readers++;
- semctl(sem_mutex, 0, SETVAL, 1); //signal(mutex)
- for(j = 0; j<20; j++) { //reading
- if(j%2!=0)
- printf("%d %d ", getpid(), list[j]);
- }printf("n");
- while(semctl(sem_mutex, 0, GETVAL) != 1); //wait(mutex)
- readers--;
- if(readers==0)
- semctl(sem_resource, 0, SETVAL, 1); //signal(resource)
- semctl(sem_mutex, 0, SETVAL, 1); //signal(mutex)
- break;
- default://writer
- while(semctl(sem_mutex, 0, GETVAL) != 1); //wait(mutex)
- writers++; //writers <- +1
- semctl(sem_mutex, 0, SETVAL, 1); //signal(mutex)
- while(semctl(sem_resource, 0, GETVAL) != 1); //wait(resource)
- list[i] = i; //writing
- while(semctl(sem_mutex, 0, GETVAL) != 1); //wait(mutex)
- writers--;
- semctl(sem_mutex, 0, SETVAL, 1); //signal(mutex)
- semctl(sem_resource, 0, SETVAL, 1); //signal(resource)
- break;
- }
- shmdt(list);
- exit(0);
- break;
- default:
- break;
- }
Add Comment
Please, Sign In to add comment