std::atomic_flag_test_and_set, std::atomic_flag_test_and_set_explicit
De cppreference.com
![]() | This page has been machine-translated from the English version of the wiki using Google Translate. The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
Déclaré dans l'en-tête <atomic> | ||
bool atomic_flag_test_and_set(volatilestd::atomic_flag* p ); | (1) | (depuis C++11) |
bool atomic_flag_test_and_set(std::atomic_flag* p ); | (2) | (depuis C++11) |
bool atomic_flag_test_and_set_explicit(volatilestd::atomic_flag* p, std::memory_order order ); | (3) | (depuis C++11) |
bool atomic_flag_test_and_set_explicit(std::atomic_flag* p, std::memory_order order ); | (4) | (depuis C++11) |
Change atomiquement l'état d'un std::atomic_flag pointé par
p
à régler (true) et renvoie la valeur qu'elle détenait avant . Original:
Atomically changes the state of a std::atomic_flag pointed to by
p
to set (true) and returns the value it held before. The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Sommaire |
[modifier]Paramètres
p | - | pointeur vers std::atomic_flag d'accès Original: pointer to std::atomic_flag to access The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
order | - | la commande de synchronisation de mémoire pour cette opération Original: the memory synchronization order for this operation The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
[modifier]Retourne la valeur
La valeur précédemment détenu par le drapeau pointé par
p
Original:
The value previously held by the flag pointed to by
p
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[modifier]Exceptions
[modifier]Mise en œuvre possible
First version |
---|
bool atomic_flag_test_and_set(volatilestd::atomic_flag* p){return p->test_and_set();} |
Second version |
bool atomic_flag_test_and_set(std::atomic_flag* p){return p->test_and_set();} |
Third version |
bool atomic_flag_test_and_set_explicit(volatilestd::atomic_flag* p, std::memory_order order){return p->test_and_set(order);} |
Fourth version |
bool atomic_flag_test_and_set_explicit(std::atomic_flag* p, std::memory_order order){return p->test_and_set(order);} |
[modifier]Exemple
Un mutex spinlock peut être mis en œuvre dans l'espace utilisateur en utilisant un atomic_flag
Original:
A spinlock mutex can be implemented in userspace using an atomic_flag
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#include <thread>#include <vector>#include <iostream>#include <atomic> std::atomic_flag lock =ATOMIC_FLAG_INIT; void f(int n){for(int cnt =0; cnt <100;++cnt){while(std::atomic_flag_test_and_set_explicit(&lock, std::memory_order_acquire));// spin until the lock is acquiredstd::cout<<"Output from thread "<< n <<'\n';std::atomic_flag_clear_explicit(&lock, std::memory_order_release);}}int main(){std::vector<std::thread> v;for(int n =0; n <10;++n){ v.emplace_back(f, n);}for(auto& t : v){ t.join();}}
Résultat :
Output from thread 2 Output from thread 6 Output from thread 7 ...<exactly 1000 lines>...
[modifier]Voir aussi
(C++11) | la serrure sans type booléen atomique Original: the lock-free boolean atomic type The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (classe) |
(C++11) (C++11) | définit atomiquement la valeur de l'indicateur de false Original: atomically sets the value of the flag to false The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (fonction) |
(C++11) | définit des contraintes de mémoire de commande pour l'opération donnée atomique Original: defines memory ordering constraints for the given atomic operation The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (typedef) |
C documentation for atomic_flag_test_and_set, atomic_flag_test_and_set_explicit |