Advertisement
Guest User

Untitled

a guest
Dec 17th, 2014
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <semaphore.h>
  3. #include <stdlib.h>
  4. #include <pthread.h>
  5.  
  6. sem_t * ready;
  7. sem_t * printed;
  8. int maxN;
  9. #define TRUE 1;
  10. #define FALSE 0;
  11.  
  12. int keepGoing = TRUE;
  13.  
  14. pthread_mutex_t numLock = PTHREAD_MUTEX_INITIALIZER;
  15.  
  16. typedef struct param
  17. {
  18. int value;
  19. } param_t;
  20.  
  21.  
  22. void *semprint(void * arg)
  23. {
  24. while(keepGoing)
  25. {
  26. //pthread_mutex_lock(&numLock);
  27. sem_wait(ready); //wait for decrement
  28. printf("Value is: %d\n", maxN);
  29. //printf("notifying dec\n");
  30. sem_post(printed);//post for decrement
  31. //sem_wait(&ready); //wait for decrement
  32. //pthread_mutex_unlock(&numLock);
  33. }
  34. return NULL;
  35. }
  36.  
  37. void *semdecrement(void * arg)
  38. {
  39. while(keepGoing)
  40. {
  41. sem_wait(printed);//wait for readytodec
  42. if(maxN == 1)
  43. {
  44. keepGoing = FALSE;
  45. }
  46. //printf("past wait print\n");
  47. maxN--;
  48. sem_post(ready);//post for print
  49.  
  50. }
  51. return NULL;
  52. }
  53.  
  54. int main(int argc, char **argv)
  55. {
  56. maxN = 10;
  57. sem_unlink("/ready");
  58. sem_unlink("/printed");
  59.  
  60.  
  61. ready = sem_open("/ready", O_CREAT, 0644, 1);
  62. printed = sem_open("/printed", O_CREAT, 0644, 0);
  63.  
  64. if(ready == SEM_FAILED)
  65. {
  66. printf("ready open failed :(");
  67. }
  68.  
  69. if(printed == SEM_FAILED)
  70. {
  71. printf("printed open failed :(");
  72. }
  73.  
  74. //printf("READY IS: %d", ready);
  75. //printf("PRINTED IS: %d", printed);
  76.  
  77. param_t data1;
  78. data1.value = 10;
  79.  
  80. pthread_t printer;
  81. pthread_t decrementer;
  82.  
  83. int printerT = pthread_create(&printer, NULL, semprint, &data1);
  84. int decrementerT = pthread_create(&decrementer, NULL, semdecrement, &data1);
  85.  
  86. pthread_join(printer, NULL);
  87. pthread_join(decrementer, NULL);
  88.  
  89. sem_close(ready);
  90. sem_close(printed);
  91.  
  92. sem_unlink("/ready");
  93. sem_unlink("/printed");
  94. printf("Finished!\n");
  95. return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement