Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*from threads.h*/
- struct queueset {
- void *ptr;
- int index;
- };
- class Queue {
- int items;
- struct queueset **queue;
- pthread_mutex_t lock;
- public:
- Queue();
- void add(void*, int);
- int get(void**);
- };
- /*from threads.cpp*/
- Queue::Queue() : items(0), lock(PTHREAD_MUTEX_INITIALIZER){
- }
- void Queue::add(void *msg, int i){
- struct queueset **ptr;
- int *test;
- pthread_mutex_lock(&lock);
- items++;
- ptr = (struct queueset**)malloc(items*4);
- if(items>1){
- bcopy(queue, ptr, (items-1)*4);
- free(queue);
- }
- queue = ptr;
- queue[items-1] = (struct queueset*)malloc(sizeof(struct queueset));
- queue[items-1]->ptr = msg;
- queue[items-1]->index = i;
- test = (int*)queue[items-i]->ptr;
- printf("queue[%d]->ptr = %d", items-i, *test);
- pthread_mutex_unlock(&lock);
- }
- int Queue::get(void **ptr){
- struct queueset **ptr2;
- int index;
- printf("%d.\n", (int)queue[0]->ptr);
- pthread_mutex_lock(&lock);
- if(!items)return NULL;
- *ptr = queue[0]->ptr;
- index = queue[0]->index;
- free(queue[0]);
- items--;
- if(items){
- ptr2 = (struct queueset**)malloc(items*4);
- bcopy(queue+4, ptr2, items*4);
- }
- free(queue);
- queue = ptr2;
- pthread_mutex_unlock(&lock);
- return index;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement