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.
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