30 votes

Est-ce que + =, | =, & = etc est atomique?

Ce sont les "modifier" les opérateurs aiment +=, |=, &= etc atomique?

Je connais ++ est atomique (si vous effectuez x++; dans deux threads différents "en même temps", vous vous retrouvez toujours avec x a augmenté de 2, par opposition à l' x=x+1 avec l'optimisation éteint.)

Ce que je me demande est de savoir si l' variable |= constant, et les goûts sont thread-safe, ou dois-je les protéger avec un mutex?

(...ou est-ce CPU dépendant? Dans ce cas, comment est-il sur les BRAS?)

9voto

Alex Budovski Points 8932

x++ est souvent implémenté dans 3 instructions: Lire X dans un registre, l'incrémenter et l'écrire en mémoire.

Votre fil peut être préempté entre ceux-ci.

6voto

Benno Points 3677

Pour que le changement de valeur soit visible sur tous les cœurs, un + = (par exemple) devrait charger la valeur, ajouter l'incrément, puis le stocker. Cela signifie que l'opération ne sera pas atomique .

Pour garantir l'atomicité, vous devez définir un verrouillage approprié autour de l'opération.

3voto

DavideRizzi Points 56

Non, ils ne sont pas atomiques! Si vous avez besoin d'opérations atomiques sur des types primitifs et que vous utilisez linux, vous pouvez vous y rendre: http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html et / ou atomique.h ...

2voto

Sam Points 9445

++ peut être atomique sur votre compilateur / plate-forme, mais dans les spécifications c ++, il n'est pas défini comme atomique.

Si vous voulez vous assurer de modifier une valeur de manière atomique, vous devez utiliser les méthodes appropriées, comme Interlocked * on windows.

Idem pour toutes les autres routines. Si vous souhaitez des opérations atomiques, vous devez utiliser les appels appropriés, pas les appels standard.

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