• [^] # Re: Hum

    Posté par . En réponse au journal Les sémaphores. Évalué à 1.

    Je ne sais pas comment c’est implémenté. Mais la lib, défini un comportement et garanti un certain nombre de choses.

    struct sembuf prendre_fourchettes[] =
    {
     {
     .sem_num = 0,
     .sem_op = -1,
     .sem_flg = SEM_UNDO
     },
     {
     .sem_num = 1,
     .sem_op = -1,
     .sem_flg = SEM_UNDO
     }
    };
    
    

    Ici on prend les fourchettes 0 et 1. semop garanti que ces deux opérations seront faites de manière atomique. Mais, il ne réserve pas. Si la fourchette 1 est prise mais pas la 0, il ne prend rien. Aucun risque d’interblocage ici. J’imagine qu’en interne il doit y avoir une file d’attente des opérations non résolu, et que à chaque libération, il vérifie si une opération est devenue possible, dans ce cas il la fait, et repasse le processus à READY.