L'hyperthreading peut-elle affecter l'atomicité de 32 bits Int lecture / écriture sur un processeur 32 bits?

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

Question

J'ai lu quelque part que HyperThreading peut rendre 32 bits Int (sur un processeur 32 bits), lire et écrire un non-atomique, même lorsqu'il s'agit de la limite alignée.Quelqu'un peut-il expliquer comment l'hyperthreading effets sur cela?

Était-ce utile?

La solution

Si cela était vrai, ce serait une sorte d'horrible bogue de la CPU qui serait spécifique à un modèle particulier ou à une étape. Ces lectures et écritures 32 bits sont atomiques sont fondamentales pour les propriétés de la plate-forme X86 et s'appuie sur Windows, Linux et beaucoup de logiciels d'application.

La seule chose que je peux penser que cela aurait pu faire référence à la transition des processeurs mono-nœuds sans hyper-filetage à des processeurs de noyau physique unique avec hyper-threading. Sur une CPU X86 à base unique sans hyper-threading, des instructions simples (telles que l'incrément) que les opérations de lecture-écriture sur des variables alignées 32 bits sont atomiques même sans préfixe de verrouillage. (Ils ne sont pas garantis, ils se trouvent, ils se trouvent juste.) Un processeur avec hyper-threading se comporte beaucoup comme une CPU avec deux cœurs physiques, de sorte que les opérations de lecture-modification-écriture (autres échange) ne sont pas garantis atomiques sans LOCK PREFIX.

C'est une distinction non pertinente actuelle depuis la grande majorité des processeurs que votre logiciel rencontrera aura plus d'un élément d'une manière ou d'une autre. Ainsi, même les instructions à instruction, les opérations de lecture-écriture-écriture sur des valeurs 32 bits alignées ne seront pas atomiques sauf verrouillées. (Échange étant l'exception, car il est verrouillé même sans le préfixe.)

Autres conseils

Lire ou écrire aligné est toujours atomique, même sur des systèmes multi-processeurs.Ce qui n'est pas atomique (et c'est probablement ce que vous avez entendu - ou du moins ce que vous devriez avoir entendu) sont des instructions en lecture-écriture, comme incrément ou ajouter avec une cible de mémoire.Ce ne sont pas atomiques même sur des systèmes HT, mais ils sont atomiques (pas par garantie, plutôt par hasard) sur des systèmes avec un seul processeur logique même lorsqu'il n'est pas verrouillé.

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