Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Not sure if all these are needed, but put them all just in case
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <pthread.h>
- using namespace std;
- typedef struct ticket_lock {
- pthread_cond_t cond;
- pthread_mutex_t mutex;
- unsigned long queue_head, queue_tail;
- } ticket_lock_t;
- #define TICKET_LOCK_INITIALIZER { PTHREAD_COND_INITIALIZER, PTHREAD_MUTEX_INITIALIZER }
- void ticket_lock(ticket_lock_t *ticket)
- {
- unsigned long queue_me;
- pthread_mutex_lock(&ticket->mutex);
- queue_me = ticket->queue_tail++;
- while (queue_me != ticket->queue_head)
- {
- pthread_cond_wait(&ticket->cond, &ticket->mutex);
- }
- pthread_mutex_unlock(&ticket->mutex);
- }
- void ticket_unlock(ticket_lock_t *ticket)
- {
- pthread_mutex_lock(&ticket->mutex);
- ticket->queue_head++;
- pthread_cond_broadcast(&ticket->cond);
- pthread_mutex_unlock(&ticket->mutex);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement