Advertisement
Guest User

Untitled

a guest
Sep 21st, 2014
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<pthread.h>
  3. #include<semaphore.h>
  4. sem_t mutex, wrt;
  5. int rc = 0, data = 0;
  6. void *reader(void *arg);
  7. void *writer(void *arg);
  8. int main()
  9. {
  10. int i;
  11. pthread_t rtid[5], wtid[5];
  12. sem_init(&mutex, 0, 1);
  13. sem_init(&wrt, 0, 1);
  14. for(i = 0; i <= 2; i++) {
  15. pthread_create(&wtid[i], NULL, writer, (void *)i);
  16. pthread_create(&rtid[i], NULL, reader, (void *)i);
  17. }
  18. for(i = 0; i <= 2; i++) {
  19. pthread_join(wtid[i], NULL);
  20. pthread_join(rtid[i], NULL);
  21. }
  22. return 0;
  23. }
  24. void *reader(void *arg)
  25. {
  26. int f = ((int) arg);
  27. sem_wait(&mutex);
  28. rc++;
  29. if (rc == 1) {
  30. sem_wait(&wrt);
  31. }
  32. sem_post(&mutex); //signal
  33. printf("Data read by reader: %d is: %d \n", f, data);
  34. sem_wait(&mutex);
  35. rc--;
  36. if(rc == 0) {
  37. sem_post(&wrt);
  38. }
  39. sem_post(&mutex);
  40. }
  41. void *writer(void *arg)
  42. {
  43. sem_wait(&wrt);
  44. data++;
  45. int f = ((int) arg);
  46. printf("Data written by writer: %d is: %d \n", f, data);
  47. sem_post(&wrt);
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement