Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <pthread.h>
- #include "t_queue.h"
- #define WORKERS 4
- typedef struct worker_t
- {
- int quit;
- queue *q;
- pthread_t tid;
- pthread_mutex_t lock;
- }worker_t;
- void *worker(void *w)
- {
- element i;
- worker_t *wrk = (worker_t *)w;
- int quit=0, empty=0, a;
- while(!quit)
- {
- pthread_mutex_lock(&wrk->lock);
- if(wrk->quit==1)
- quit=1;
- if(get_q(wrk->q, &i)!=NULL)
- {
- printf("worker(%u): %d\n", wrk->tid, i);
- }
- pthread_mutex_unlock(&wrk->lock);
- }
- }
- worker_t *new_w(queue *q)
- {
- worker_t *w;
- w = (worker_t *)malloc(sizeof(worker_t));
- pthread_mutex_init(&w->lock, NULL);
- w->quit = 0;
- w->q = q;
- pthread_create(&w->tid, NULL, worker, w);
- return w;
- }
- void del_w(worker_t *w)
- {
- pthread_mutex_lock(&w->lock);
- w->quit = 1;
- pthread_mutex_unlock(&w->lock);
- pthread_mutex_destroy(&w->lock);
- pthread_join(w->tid, NULL);
- free(w);
- }
- int main()
- {
- queue *q;
- worker_t *workers[WORKERS];
- int i;
- q = new_q();
- for(i=0;i<WORKERS;i++) {
- workers[i] = new_w(q);
- printf("%u\n", workers[i]->tid);
- }
- for(i=0;i<WORKERS;i++)
- put_q(q, i);
- for(i=0;i<WORKERS;i++)
- del_w(workers[i]);
- del_q(q);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement