Domanda

Vorrei sapere se tento di bit impostati all'interno di un car / intero da più thread, perderò qualsiasi modifica? Avrò tutti zeri inizialmente e le filettature limito impostarlo 1. L'architettura del sistema è x64.

Grazie, Gokul.

È stato utile?

Soluzione

On x64 (x86 e) operazioni su interi sono atomiche. Ciò significa che legge e scrive sono indipendentemente atomiche, non in combinazione. (Ad esempio, se si dispone di due thread scrivere un int, allo stesso tempo, non sarà possibile vedere la metà di uno e una metà all'altra -. Si vedrà sempre un int completo o l'altro)

Tuttavia, la lettura e la scrittura sono due operazioni distinte. È possibile eseguire alcune operazioni interbloccati (provocando la lettura e scrittura di essere un'operazione atomica) ma non credere che la logica bit per bit rientra nella serie di operazioni che possono essere eseguite in questo modo.

Credo che si dovrà chiudere su alcuni mutex / monitor ed eseguire la lettura / scrittura, se si desidera che questa operazione sia atomica.

Altri suggerimenti

è necessario utilizzare un mutex o simile meccanismo di sincronizzazione, o un'operazione atomica. Per i primi, ci sono le librerie POSIX e Windows facilmente disponibili e molto standard. Per questi ultimi, la maggior parte dei compilatori fornirà alcune funzioni (ad esempio http://gcc.gnu.org/wiki/Atomic ), in linea di assemblaggio modalità o altro modo comodo per li usano, e si può sempre ripiegare per il collegamento a un oggetto compilato dal linguaggio assembly.

Si può sicuramente non evitare questa sincronizzazione esplicita. Anche se dire XOR in qualche modo gestito direttamente e atomicamente sul valore nei vostri core di CPU più intimi della memoria cache (che non), è necessario per garantire che il valore è sincronizzato con cache altri core CPU. Solo le istruzioni della CPU che le cache in modo esplicito di sincronizzazione sono utili per voi - è più facile usarli attraverso una delle opzioni di cui sopra biblioteca

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