Précédent Remonter Suivant

4  Quelle synchronisation

Soit la fonction f() suivante

#define N    12

void
f()
{
    static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; 
    static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
    static int already = 0;
    
    pthread_mutex_lock(&lock);
    already++;
    if (already != N)
        pthread_cond_wait(&cond, &lock);
    else
        already = 0;
    pthread_cond_signal(&cond);
    pthread_mutex_unlock(&lock);
}


Exercice 9
   Quelle synchronisation est réalisée par un groupe de processus légers appelant concurremment la fonction f() ?


Exercice 10
   Il est habituel d'encadrer les appels à la fonction pthread_cond_wait() par une boucle while. Ce n'est pas le cas dans cette fonction f(). Expliquez.


Exercice 11
   Quel problème peut survenir pour un groupe des processus légers voulant réaliser de multiples synchronisations successives par la fonction f() ?


Exercice 12
   Comment corriger ce problème ? Donnez une version corrigée de la fonction f().


Précédent Remonter Suivant