Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<pthread.h>
- #include<semaphore.h>
- sem_t mutex, wrt;
- int rc = 0, data = 0;
- void *reader(void *arg);
- void *writer(void *arg);
- int main()
- {
- int i;
- pthread_t rtid[5], wtid[5];
- sem_init(&mutex, 0, 1);
- sem_init(&wrt, 0, 1);
- for(i = 0; i <= 2; i++) {
- pthread_create(&wtid[i], NULL, writer, (void *)i);
- pthread_create(&rtid[i], NULL, reader, (void *)i);
- }
- for(i = 0; i <= 2; i++) {
- pthread_join(wtid[i], NULL);
- pthread_join(rtid[i], NULL);
- }
- return 0;
- }
- void *reader(void *arg)
- {
- int f = ((int) arg);
- sem_wait(&mutex);
- rc++;
- if (rc == 1) {
- sem_wait(&wrt);
- }
- sem_post(&mutex); //signal
- printf("Data read by reader: %d is: %d \n", f, data);
- sem_wait(&mutex);
- rc--;
- if(rc == 0) {
- sem_post(&wrt);
- }
- sem_post(&mutex);
- }
- void *writer(void *arg)
- {
- sem_wait(&wrt);
- data++;
- int f = ((int) arg);
- printf("Data written by writer: %d is: %d \n", f, data);
- sem_post(&wrt);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement