std::atomic_flag_test_and_set, std::atomic_flag_test_and_set_explicit
Da cppreference.com.
![]() | Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate. La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui. |
Elemento definito nell'header <atomic> | ||
bool atomic_flag_test_and_set(volatilestd::atomic_flag* p ); | (1) | (dal C++11) |
bool atomic_flag_test_and_set(std::atomic_flag* p ); | (2) | (dal C++11) |
bool atomic_flag_test_and_set_explicit(volatilestd::atomic_flag* p, std::memory_order order ); | (3) | (dal C++11) |
bool atomic_flag_test_and_set_explicit(std::atomic_flag* p, std::memory_order order ); | (4) | (dal C++11) |
Atomico cambia lo stato di un std::atomic_flag puntato da
p
per impostare (true) e restituisce il valore di essa deteneva prima. 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.
Indice |
[modifica]Parametri
p | - | puntatore a std::atomic_flag per accedere 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 sincronizzazione fine memoria per questa operazione 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. |
[modifica]Valore di ritorno
Il valore precedentemente detenuta dalla bandiera a cui punta
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.
[modifica]Eccezioni
[modifica]Possibile implementazione
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);} |
[modifica]Esempio
Un mutex spinlock può essere implementato in spazio utente utilizzando 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();}}
Output:
Output from thread 2 Output from thread 6 Output from thread 7 ...<exactly 1000 lines>...
[modifica]Vedi anche
(C++11) | il blocco privo di tipo booleano atomica 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) | imposta atomicamente il valore della bandiera 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. (funzione) |
(C++11) | definisce i limiti di memoria di ordinazione per il data operazione atomica 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 |