Advertisement
Guest User

Untitled

a guest
May 16th, 2010
338
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. /*from threads.h*/
  2. struct queueset {
  3.     void *ptr;
  4.     int index;
  5. };
  6.  
  7. class Queue {
  8.     int items;
  9.     struct queueset **queue;
  10.     pthread_mutex_t lock;
  11.  
  12.     public:
  13.     Queue();
  14.     void add(void*, int);
  15.     int get(void**);
  16. };
  17.  
  18. /*from threads.cpp*/
  19. Queue::Queue() : items(0), lock(PTHREAD_MUTEX_INITIALIZER){
  20. }
  21.  
  22. void Queue::add(void *msg, int i){
  23.     struct queueset **ptr;
  24.     int *test;
  25.     pthread_mutex_lock(&lock);
  26.     items++;
  27.     ptr = (struct queueset**)malloc(items*4);
  28.     if(items>1){
  29.         bcopy(queue, ptr, (items-1)*4);
  30.         free(queue);
  31.     }
  32.     queue = ptr;
  33.     queue[items-1] = (struct queueset*)malloc(sizeof(struct queueset));
  34.     queue[items-1]->ptr = msg;
  35.     queue[items-1]->index = i;
  36.     test = (int*)queue[items-i]->ptr;
  37.     printf("queue[%d]->ptr = %d", items-i, *test);
  38.     pthread_mutex_unlock(&lock);
  39. }
  40.  
  41. int Queue::get(void **ptr){
  42.     struct queueset **ptr2;
  43.     int index;
  44.     printf("%d.\n", (int)queue[0]->ptr);
  45.  
  46.     pthread_mutex_lock(&lock);
  47.     if(!items)return NULL;
  48.  
  49.     *ptr = queue[0]->ptr;
  50.     index = queue[0]->index;
  51.     free(queue[0]);
  52.     items--;
  53.     if(items){
  54.         ptr2 = (struct queueset**)malloc(items*4);
  55.         bcopy(queue+4, ptr2, items*4);
  56.     }
  57.     free(queue);
  58.     queue = ptr2;
  59.  
  60.     pthread_mutex_unlock(&lock);
  61.  
  62.     return index;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement