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().