33 votes

Quelles architectures CPU prennent en charge Comparer et échanger (CAS)?

juste curieux de savoir quelles architectures CPU prendre en charge comparer et échanger primitives atomiques?

10voto

jdkoftinoff Points 1468

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"

8voto

Peeter Joot Points 1975

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

7voto

Doug65536 Points 62

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.

5voto

mat_geek Points 1367

Intel x86 a ce support. IBM dans c'est Solaris à Linux Porting Guide donne cet exemple:

5voto

Michael Burr Points 181287

En commençant par l'architecture ARMv6 ARM a les instructions LDREX/STREX qui peuvent être utilisées pour mettre en œuvre une opération de comparaison atomique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X