La plupart des implémentations que je trouve nécessitent une instruction matérielle pour cela. Cependant, je doute fortement que cela soit nécessaire (si c'est le cas, je ne comprends pas pourquoi ...)Comment un code pourrait-il tester et définir le comportement sans une instruction matérielle spéciale?
Répondre
Vous n'avez pas besoin d'un test et de définir des instructions pour obtenir un verrouillage d'exclusion mutuelle, si c'est ce que vous demandez . Dijkstra a décrit le premier algorithme d'exclusion mutuelle dont je suis au courant, en 1965. Le titre de l'article était "Solution d'un problème de contrôle de programmation concurrente", recherchez Google pour une copie près de chez vous. L'algorithme original ne nécessitait aucun support particulier du matériel, mais fournir une instruction atomique dans le CPU améliore considérablement les performances.
Test-and-set, échange atomique et load-linked + stockage-conditionnel sont toutes des primitives communes pour les processeurs à fournir. Tout peut être utilisé pour implémenter l'exclusion mutuelle, qui peut ensuite être utilisée pour implémenter la sémantique de verrouillage que vous voulez.
Si vous souhaitez une façon de le faire, et utilisez gcc, vous pouvez utiliser les fonctions intégrées atomiques de gcc cross-arc:
http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html
appeler ces entraînera une instruction machine spécifique du matériel pour l'architecture de construction actuelle. Sur ceux qui ne les supportent pas, la compilation échouera. (Je pense ...)
http://www.dis.uniroma1.it/~baldoni/p569-dijkstra.pdf – Chris