juste curieux de savoir quelles architectures CPU prendre en charge comparer et échanger primitives atomiques?
Réponses
Trop de publicités?Powerpc a des primitifs plus puissants disponibles: "lwarx" et "stwcx"
lwarx charge une valeur de mémoire, mais se souvient de l'emplacement. Tout autre fil ou cpu qui touche cet emplacement entraînera le "stwcx", une instruction de magasin conditionnel, à l'échec.
Ainsi, le combo lwarx /stwcx vous permet d'implémenter l'incrément atomique / décrément, comparer et échanger, et des opérations atomiques plus puissantes comme "incrément atomique indice tampon circulaire"
Une façon différente et plus facile de répondre à cette question peut être d'énumérer les plates-formes multiprocesseurs qui ne prennent pas en charge une comparaison et un échange (ou un lien de charge / magasin-conditionnel qui peut être utilisé pour écrire un).
Le seul que je connaisse est PARISC, qui n'a qu'une instruction de mot clair atomique. Cela peut être utilisé pour construire un mutex (à condition qu'on aligne le mot sur une limite de 16 octets). Il n'y a pas de CAS sur cette archèque (contrairement à x86, ia64, ppc, sparc, mips, s390, ...)
Quelques personnes ont commenté/demandé si le préfixe de « serrure » est nécessaire sur x86/x64 pour cmpxchg. La réponse est oui pour les machines multicœurs. L'instruction est complètement atomique pour les machines à noyau unique sans verrouillage.
Il a été un moment depuis que j'ai étudié ce genre de choses que profondément, mais je semble me rappeler que l'instruction est techniquement redémarré - il peut interrompre l'instruction en plein vol (si elle n'a pas eu d'effets secondaires encore) pour éviter de retarder la manipulation d'interruption pendant trop longtemps.
Intel x86 a ce support. IBM dans c'est Solaris à Linux Porting Guide donne cet exemple: