web-dev-qa-db-fra.com

différence entre le bool atomique de la norme et le drapeau atomique

Je n'étais pas au courant du std::atomic variables mais connaissait les std::mutex (bizarre à droite!) fourni par la norme; cependant une chose a attiré mon attention: il y a deux types atomiques apparemment identiques (pour moi) fournis par la norme, énumérés ci-dessous:

  1. std::atomic<bool> type

  2. std::atomic_flag type

Il est également mentionné avec l'exemple de std::atomic_flag type -

std :: atomic_flag est un type booléen atomique. Contrairement à toutes les spécialisations de std :: atomic, il est garanti d'être sans verrouillage. Contrairement à std :: atomic, std :: atomic_flag ne fournit pas d'opérations de chargement ou de stockage.

que je ne comprends pas. Est std::atomic bool type sans garantie de verrouillage? Alors ce n'est pas atomique ou quoi?

Alors, quelle est la différence entre les deux et quand dois-je utiliser lequel?

40
hg_git

std :: atomic bool type non garanti pour être sans verrou?

Correct. std::atomic peut être implémenté à l'aide de verrous.

alors ce n'est pas atomique ou quoi?

std::atomic est atomique, qu'il ait été implémenté à l'aide de verrous ou sans. std::atomic_flag est garanti d'être implémenté sans utiliser de verrous.

Alors, quelle est la différence n/b deux

La principale différence en plus de la garantie sans verrouillage est:

std::atomic_flag ne fournit pas d'opérations de chargement ou de stockage.


et quand dois-je utiliser lequel?

Habituellement, vous voudrez utiliser std::atomic<bool> lorsque vous avez besoin d'une variable booléenne atomique. std::atomic_flag est une structure de bas niveau qui peut être utilisée pour implémenter des structures atomiques personnalisées.

29
eerorika

std::atomic<T> garantit que les accès à la variable seront atomiques. Il ne dit cependant pas comment l'atomicité est atteinte. Il peut s'agir d'une variable sans verrou ou d'un verrou. L'implémentation réelle dépend de votre architecture cible et du type T.

std::atomic_flag d'autre part est garanti d'être mis en œuvre en utilisant une technique sans verrouillage.

23
michalsrb