web-dev-qa-db-fra.com

Comment pthread_mutex_lock est implémenté

Je suis simplement curieux de savoir comment les fonctions liées à la synchronisation entre les threads sont implémentées dans Unix. Par exemple, que se passe-t-il lorsque j'appelle pthread_mutex_lock? Y a-t-il des pointeurs utilisés? Une référence au code source serait vraiment utile.

42
avd

Il est à la fois compliqué et diffère d'Unix en variante Unix.

Sous Linux, par exemple, un système appelé Futex (abréviation de Fast Userspace Mutex) est utilisé.

Dans ce système, une opération d'incrémentation et de test atomique est effectuée sur la variable mutex dans l'espace utilisateur.

Si le résultat de l'opération indique qu'il n'y a pas de conflit sur le verrou, l'appel à pthread_mutex_lock revient sans jamais changer de contexte dans le noyau, donc l'opération de prise d'un mutex peut être très rapide.

Ce n'est que si un conflit a été détecté qu'un appel système (appelé futex) et un changement de contexte dans le noyau se produisent qui mettent le processus d'appel en veille jusqu'à ce que le mutex soit libéré.

Il y a beaucoup plus de détails, en particulier pour les mutex d'héritage fiables et/ou prioritaires, mais c'est l'essence même.

Pour plus de détails, voir: http://linux.die.net/man/2/futex et http://en.wikipedia.org/wiki/Futex

57
gby

Sous Linux, pthreads est disponible via libc. L'habitude est la glibc, et la source est disponible ici !

Vérifiez cela référence .

6
karlphillip