Voici le code:erreurs de codes thread-mutex C?
....
typedef struct {
int buf[10];
long head, tail;
int full, empty;
pthread_mutex_t *mut;
pthread_cond_t *notFull, *notEmpty;
} queue;
int main(){
queue *que;
pthread_t sup, cut;
que = queueInit();
if(que == NULL){
fprintf(stderr, "Queue Init failed");
exit(1);
}
pthread_create(&sup, NULL, insertQueue, (void*) que);
pthread_create(&cut, NULL, insertQueue, (void*) que);
pthread_join(sup,NULL);
pthread_join(cut,NULL);
queueDelete(que);
return 0;
}
void *insertQueue(void *q)
{
queue *que;
int i;
que = (queue *)q;
for(i=0; i<20;i++){
// Get mutex lock on the queue
pthread_mutex_lock(&mut); // Question (i) I guess this line is wrong
while(que>full){
printf("Its full");
// pthread wait condition for queue not full
pthread_cond_wait(¬Full, &mut); // Question (ii)
}
queueAdd(que,i);
// Unlock the queue
pthread_mutex_unlock(&mut); // Question (iii)
// Send signal saying there is data to be read
pthread_cond_signal(¬Empty); // Question (iv)
usleeep(100000);)
return(NULL);
}
}
queue *queueInit(void){
queue *q;
q = (queue *)malloc(sizeof(queue));
if(q==NULL) return (NULL);
q->empty = 1;
q->full = 0;
q->head = 0;
q->tail = 0;
q->mut=(pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
// Set default condition
pthread_mutex_init(&mut,NULL); // Question v
// Condition for not null
pthread_mutex_init(¬Null,NULL); // Question vi
// Condition for not empty
pthread_mutex_init(¬Empty,NULL); // Question vi
return (q);
}
....
J'ai mis ma question au code, à savoir la question i - vi
Mon sentiment me dire, mes arguments sont faux, par exemple la question vi:
pthread_cond_init(notEmpty,NULL);
il devrait être quelque chose d'autre, pas "(& notEmpty, Null)".
Aidez-nous s'il vous plaît.
Deux variables de condition semblent moche et cela signifie généralement que ce n'est pas une solution idéale. Vous pouvez simplement avoir une seule variable de condition "queueChanged" ou quelque chose et signaler que la file d'attente gagne ou perd un élément. – AlastairG