• [^] # Re: linuuuuuuuuuuuuux

    Posté par . En réponse à la dépêche Quel OS pour le multiprocesseur ?. Évalué à -1.

    Les mutex de la glib sont binaires, il n'y pas de notions de multiples lock. Lorsque quelqu'un fait g_mutex_lock() sur un mutex déjà vérouillé, il sera en sommeil jusqu'à ce que le mutex soit déverouillé, et il le verouillera alors.

    Pour l'histoire de l'ordonencement, il suffit de rajouter un deuxième mutex:
    P1:

    g_mutex_unlock(mutex);
    /* Le boulot périodique */
    g_mutex_lock(mutex2);
    g_mutex_lock(mutex);
    g_mutex_unlock(mutex2);

    P2:

    g_mutex_lock(mutex2);
    g_mutex_lock(mutex);
    g_mutex_unlock(mutex2);
    /* Ce qu'il doit faire */
    g_mutex_unlock(mutex);
    g_mutex_lock(mutex2);


    Donc là on a:
    P1 dévérouille mutex, effectue son traitement et attend que P2 ait libéré mutex2
    P2 se bloque sur mutex, et dévourille mutex2 dés que possible, puis effectue son traitement
    P1 peut reprendre la main (à un moment quelconque du traitement de P2) et vérouille mutex, qui est actuellement vérouillé par P2
    P2 termine son traitement, et libère mutex, puis se bloque sur mutex2
    P1 peut reprendre son exécution, et libère mutex2. On est de retour dans la situation de départ, près pour un autre cycle.

    -1 car HS