2017-10-17 42 views
0

Donc l'idée de pthread_cond_wait() est qu'il va déverrouiller le mutex et attendre la condition.Comment fonctionne pthread_cond_wait()?

Supposons que vous déverrouilliez manuellement le mutex en premier, puis que vous attendiez une condition. Dans ce délai, entre ces deux opérations, vous devez supposer que quelque chose de mauvais peut arriver, un autre thread verrouillera le mutex, ce qui n'est pas bon. Il en va de même si vous attendez et déverrouillez d'abord, ce n'est pas possible.

Alors, voici ma question:
comment peut-pthread_cond_wait() réellement?

Le thread appelle la fonction et passe un mutex verrouillé et attend ensuite que la condition se stabilise?

Comment un autre thread modifie ensuite la variable, si elle est déjà verrouillée par ce thread? J'ai d'abord pensé que le mutex devait être récursif, mais être récursif ne permet que le même thread de verrouiller le mutex plusieurs fois.

+3

faire des recherches sur les opérations atomiques * *. Le déverrouillage et la modification de l'état du thread en attente se produisent dans une opération atomique, éventuellement à l'intérieur du noyau du système d'exploitation. –

Répondre