L'ipertheading può influenzare l'atomicità di Int Lettura / scrittura a 32 bit su un processore a 32 bit?

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

Domanda

Ho letto da qualche parte che HyperThreading può creare un INT a 32 bit (su un processore a 32 bit) leggere e scrivere non atomico anche quando è allineato il confine.Qualcuno può spiegare come gli effetti hyperthreading questo?

È stato utile?

Soluzione

Se fosse vero, sarebbe una specie di orribile bug della CPU che sarebbe specifico per un particolare modello o un passo. Quei letti e scritture a 32 bit sono atomici è fondamentale per le proprietà della piattaforma X86 ed è invocata da Windows, Linux e lotti e un sacco di software applicativo.

L'unica cosa che riesco a pensare a questo potrebbe essere riferita a Transitioning da CPU a nucleo singolo senza hyper-threading alle CPU a core singoli con iper-filettatura. Su una CPU X86 singolo nuclea senza iper-filettatura, le singole istruzioni (come l'incremento) che eseguono le operazioni di lettura-modifica-scrittura sulle variabili a 32 bit allineate sono atomiche anche senza un prefisso di blocco. (Non sono garantiti, si verificano solo di essere.) Una CPU con Hyper-Threading si comporta molto simile a una CPU con due nuclei fisici, quindi le operazioni di lettura-modifica-scrittura (altre allora scambi) non sono garantiti atomici senza a Blocca il prefisso.

È una distinzione irrilevante ora dal momento che la stragrande maggioranza delle CPU del tuo software avrà più di un altro modo o nell'altro. Quindi, anche le operazioni di scrittura di lettura-lettura a singola istruzione sui valori allineati a 32 bit non saranno atomici a meno che non siano bloccati. (Scambio di essere l'eccezione, dal momento che è bloccato anche senza il prefisso.)

Altri suggerimenti

Lettura o scrittura allineata è sempre atomica, anche su sistemi multi-cpu.Ciò che non è atomico (e questo è probabilmente ciò che hai sentito - o almeno ciò che dovresti sentire) sono istruzioni di lettura-modifica-scrittura, come incremento o aggiungere con un obiettivo di memoria.Quelli non sono atomici anche sui sistemi HT, ma sono atomici (non garanzia, piuttosto per caso) su sistemi con una singola CPU logica anche quando non bloccata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top