Ciao a tutti avrei una piccola domanda da porvi sull'utilizzo di mutex con i thread.


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);
}
Il mio dubbio e' su mutex_lock.
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