Advertisement
Guest User

Untitled

a guest
Aug 25th, 2012
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <pthread.h>
  5. #include "t_queue.h"
  6.  
  7. #define WORKERS 4
  8.  
  9. typedef struct worker_t
  10. {
  11. int quit;
  12. queue *q;
  13. pthread_t tid;
  14. pthread_mutex_t lock;
  15.  
  16. }worker_t;
  17.  
  18. void *worker(void *w)
  19. {
  20. element i;
  21. worker_t *wrk = (worker_t *)w;
  22. int quit=0, empty=0, a;
  23.  
  24. while(!quit)
  25. {
  26. pthread_mutex_lock(&wrk->lock);
  27. if(wrk->quit==1)
  28. quit=1;
  29.  
  30. if(get_q(wrk->q, &i)!=NULL)
  31. {
  32. printf("worker(%u): %d\n", wrk->tid, i);
  33.  
  34. }
  35. pthread_mutex_unlock(&wrk->lock);
  36. }
  37. }
  38.  
  39. worker_t *new_w(queue *q)
  40. {
  41. worker_t *w;
  42.  
  43. w = (worker_t *)malloc(sizeof(worker_t));
  44. pthread_mutex_init(&w->lock, NULL);
  45.  
  46. w->quit = 0;
  47. w->q = q;
  48.  
  49. pthread_create(&w->tid, NULL, worker, w);
  50.  
  51. return w;
  52.  
  53. }
  54.  
  55. void del_w(worker_t *w)
  56. {
  57.  
  58. pthread_mutex_lock(&w->lock);
  59.  
  60. w->quit = 1;
  61.  
  62. pthread_mutex_unlock(&w->lock);
  63. pthread_mutex_destroy(&w->lock);
  64. pthread_join(w->tid, NULL);
  65. free(w);
  66.  
  67. }
  68.  
  69. int main()
  70. {
  71. queue *q;
  72. worker_t *workers[WORKERS];
  73. int i;
  74.  
  75. q = new_q();
  76. for(i=0;i<WORKERS;i++) {
  77. workers[i] = new_w(q);
  78. printf("%u\n", workers[i]->tid);
  79. }
  80.  
  81. for(i=0;i<WORKERS;i++)
  82. put_q(q, i);
  83.  
  84. for(i=0;i<WORKERS;i++)
  85. del_w(workers[i]);
  86.  
  87. del_q(q);
  88.  
  89. return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement