Quiz sepc moniteurs

De Ensiwiki
Aller à : navigation, rechercher

   int nb=0;
   mtx_t m;
   cnd_t c1;
   cnd_t c2;
   
   void A() {
      while (1) {
        mtx_lock( &m );
        while(nb%2 != 0)
          cnd_wait( &c1,&m);
   
        printf("A\n");
        nb ++;
        cnd_signal(c2);
        mtx_unlock( & m );
      }
   }
   
   void B() {
      while (1) {
        mtx_lock( &m );
        while((nb)%2 == 0)
          cnd_wait(& c2, &m);
   
        printf("B\n");
        nb++;
        cnd_signal(c1);
        mtx_unlock( &m );
      }
   }

1. Après initialisation des variables, les deux fonctions précédentes sont exécutées simultanément par deux threads d'un même processus..Le terminal associé au processus (1 seul choix):

affiche alternativement A et B, commençant par B
affiche alternativement deux A puis deux B
affiche alternativement A et B, commençant par A
n'affiche que des A
n'affiche que des A ou que des B suivant le premier qui a réussi à avoir le lock sur le mutex
n'affiche que des B
toutes les réponses précédentes sont fausses

2. Même programme que pour la question précédente. Que se passe-t-il si deux threads exécutent la fonction A, et un thread la fonction B ? Le terminal (1 seul choix):

affiche deux fois plus de A que de B
n'affiche que des A
affiche alternativement A et B, commençant par B
n'affiche que des B
n'affiche que des A ou que des B suivant le premier qui a réussi à avoir le lock sur le mutex
affiche alternativement A et B, commençant par A
affiche alternativement deux A puis B
toutes les réponses précédentes sont fausses

Votre pointage est 0 / 0