Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [C] pthread mutex

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    348

    [C] pthread mutex

    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

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    49
    volendo c'è la try_lock mi pare si chiami così che verifica se il mutex è libero esegue qualcosa se no può svolgere altro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.