Comment un code pourrait-il tester et définir le comportement sans une instruction matérielle spéciale?

StackOverflow https://stackoverflow.com/questions/107184

Question

La plupart des implémentations que je trouve nécessitent une instruction matérielle pour le faire. Cependant, je doute fortement que cela soit nécessaire (si tel est le cas, je ne comprends pas pourquoi ...)

Était-ce utile?

La solution

Vous n'avez pas besoin d'un test ni d'instructions pour obtenir un verrouillage par exclusion mutuelle, si c'est ce que vous demandez. Dijkstra a décrit le premier algorithme d'exclusion mutuelle que je connaisse, en 1965. Le titre de l'article était "Solution d'un problème lié au contrôle de la programmation concurrente", recherchez sur Google une copie près de chez vous. L'algorithme d'origine n'a nécessité aucune prise en charge matérielle particulière du système, mais la fourniture d'une instruction atomique dans le processeur améliore considérablement les performances.

Test-and-set, échange atomique, et load-linked + store-conditionnel sont des primitives communes à fournir par les CPU. Tous peuvent être utilisés pour implémenter une exclusion mutuelle, qui peut ensuite être utilisée pour implémenter la sémantique de verrouillage souhaitée.

Autres conseils

Si vous souhaitez utiliser un moyen de cross-arch pour le faire et que vous utilisez gcc, vous pouvez utiliser les modifications atomiques de gcc:

http://gcc.gnu.org/onlinedocs/gcc/Atomic -Builtins.html

Leur appel entraînera une instruction machine spécifique au matériel pour l'architecture de construction actuelle. Sur ceux qui ne les supportent pas, la compilation échouera. (Je pense ...)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top