у меня есть:
struct elem {
data d;
struct elem *next;
};
typedef struct elem elem;
struct queue {
int cnt;
elem *front;
elem *rear;
};
void enqueue(data d, queue *q);
void enqueue(data d, queue *q)
{
elem *p;
p = malloc(sizeof(elem));
p -> d = d;
p -> next = NULL;
if (!empty(q)) {
q -> rear -> next = p;
q -> rear = p;
}
else
q -> front = q -> rear = p;
q -> cnt++;
}
который будет называться:
int main(){
struct queue Q;
initialize(&Q); //init the queue
enqueue( 10000, &Q);
return 0;
}
и создание некоторых потоков, например:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define NUM_THREADS 5
/**
*
*
*/
pthread_t threads[NUM_THREADS];
long t;
for(t=0;t<NUM_THREADS;t++){
pthread_create(&threads[t], NULL, enqueue, (void *)t);
}
Как мне изменить функцию enqueue, чтобы в pthread_create каждый поток вызывал
enqueue( variable, &Q);
(я делаю очередь без блокировки, и у меня уже есть логика, но я застрял в том, как каждый поток вызывает функцию постановки в очередь ...)
- EDIT -
Я делаю предложенный ответ и получаю:
queue.c: In function ‘main’:
queue.c:130: warning: passing argument 3 of ‘pthread_create’
from incompatible pointer type /usr/include/pthread.h:227:
note: expected ‘void * (*)(void *)’ but argument is of type ‘void (*)(data, struct queue *)’