Ciao a tutti avrei una piccola domanda da porvi sull'utilizzo di mutex con i thread.
Il mio dubbio e' su mutex_lock.codice:int count =0; pthread_mutex_t count_mutex; pthread_cond_t count_soglia; void *conta(void *idp) { int i; for (i=0; i<10000000;i++) { pthread_mutex_lock(&count_mutex); count++; /* Se il valore di condizione e' stato raggiunto si invia un segnale a tutti i thread in attesa condizione count_soglia */ if (count == LIMITE) {pthread_cond_signal(&count_soglia); printf("i = %d\n", i); } pthread_mutex_unlock(&count_mutex); } pthread_exit(NULL); } void *aspetta(void *idp) { int my_id = (int)idp; printf("Inizio dell'attesa del thread n.%d\n", my_id); pthread_mutex_lock(&count_mutex); while (count<LIMITE) /* condizione */ pthread_cond_wait(&count_soglia, &count_mutex); /* attesa della condizione */ printf("Il thread %d ha ricevuto il segnale di condizione\n", my_id); pthread_mutex_unlock(&count_mutex); pthread_exit(NULL); } int main (int argc, char *argv[]) { int i; pthread_t threads[2]; pthread_mutex_init(&count_mutex, NULL); pthread_cond_init (&count_soglia, NULL); /* creazione dei threads */ pthread_create(&threads[1], 0, conta, (void *)1); pthread_create(&threads[0], 0, aspetta, (void *)2); /* attesa del lavoro dei threads */ for (i=0; i<2; i++) pthread_join(threads[i], NULL); printf ("Fine.\n"); /* distruzione mutex e variabile di condizione */ pthread_mutex_destroy(&count_mutex); pthread_cond_destroy(&count_soglia); pthread_exit(NULL); }
pthread_mutex_lock si blocca se il lock e' gia' stato impostato da un altro thread.
Quindi non e' detto che che il thread con funzione "conta" venga eseguito sempre prima di "aspetta" perche' se la CPU passa ad "aspetta" lui blocca count_mutex.
Mentre sto scrivendo sto rileggendo anche cosa fa cond_wait e quindi cond_wait aspetta il signal e rilascia la il mutex.Giusto?
Cmq grazie ciao

Rispondi quotando