Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2014
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.88 KB | None | 0 0
  1. //Not sure if all these are needed, but put them all just in case
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <pthread.h>
  6.  
  7. using namespace std;
  8.  
  9. typedef struct ticket_lock {
  10. pthread_cond_t cond;
  11. pthread_mutex_t mutex;
  12. unsigned long queue_head, queue_tail;
  13. } ticket_lock_t;
  14.  
  15. #define TICKET_LOCK_INITIALIZER { PTHREAD_COND_INITIALIZER, PTHREAD_MUTEX_INITIALIZER }
  16.  
  17. void ticket_lock(ticket_lock_t *ticket)
  18. {
  19. unsigned long queue_me;
  20.  
  21. pthread_mutex_lock(&ticket->mutex);
  22. queue_me = ticket->queue_tail++;
  23. while (queue_me != ticket->queue_head)
  24. {
  25. pthread_cond_wait(&ticket->cond, &ticket->mutex);
  26. }
  27. pthread_mutex_unlock(&ticket->mutex);
  28. }
  29.  
  30. void ticket_unlock(ticket_lock_t *ticket)
  31. {
  32. pthread_mutex_lock(&ticket->mutex);
  33. ticket->queue_head++;
  34. pthread_cond_broadcast(&ticket->cond);
  35. pthread_mutex_unlock(&ticket->mutex);
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement