2010-06-23 6 views
0

lorsqu'un thread1 a déjà acquis un verrou sur un objet mutex, si thread2 tente d'acquérir un verrou sur le même objet mutex, thread2 sera bloqué. Voici mes questions: 1. comment thread2 vient à savoir que l'objet mutex est déverrouillé? 2. thread2 essayera-t-il d'acquérir un verrou à des intervalles de temps prédéfinis?quelques questions concernant pthread_mutex_lock

Répondre

0

Cela dépend vraiment de l'OS, mais ce qui se passe habituellement, c'est que thread2 est suspendu et mis sur une liste d'attente maintenue par le mutex. Lorsque le mutex devient disponible, un thread sur la liste d'attente du mutex est retiré de la liste et remis sur la liste des threads actifs. L'OS peut alors le programmer comme il le ferait habituellement. thread2 est totalement quiescent jusqu'à ce qu'il puisse acquérir le mutex.

+0

@all merci les gars – lakshman

1

Je sens un malentendu sur le fonctionnement d'un mutex. Lorsque thread 2 tente d'acquérir un mutex qui est déjà détenue par thread 1, l'appel qui essaie de prendre le mutex ne renverra pas jusqu'à ce que le mutex devient disponible (sauf si vous avez un délai d'attente avec la variante trylock()). Donc, le thread 2 n'a pas besoin de boucler là et continue à essayer de prendre le mutex (sauf si vous utilisez un timeout, vous pouvez donc abandonner en essayant de prendre le mutex en fonction d'une autre condition comme une condition d'annulation).

+0

Mon interprétation est que l'OP posait des questions sur la mise en œuvre du mutex lui-même. – mschaef

+1

@mschaef: Vous avez probablement raison. Il est difficile de dire le niveau de compréhension du PO en fonction du libellé de la question. –