std::atomic_flag_test_and_set, std::atomic_flag_test_and_set_explicit
Aus 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. |
definiert in Header <atomic>
|
||
bool atomic_flag_test_and_set( volatile std::atomic_flag* p ); |
(1) | (seit C++11) |
bool atomic_flag_test_and_set( std::atomic_flag* p ); |
(2) | (seit C++11) |
bool atomic_flag_test_and_set_explicit( volatile std::atomic_flag* p, std::memory_order order ); |
(3) | (seit C++11) |
bool atomic_flag_test_and_set_explicit( std::atomic_flag* p, std::memory_order order ); |
(4) | (seit C++11) |
Atomar ändert den Zustand eines std::atomic_flag, auf die
p
auf (true) und gibt den Wert, bevor gehalten . 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.
Inhaltsverzeichnis |
[Bearbeiten] Parameter
p | - | Zeiger auf std::atomic_flag zu erreichen
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 | - | der Speicher-Synchronisation, um für diesen Vorgang
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. |
[Bearbeiten] Rückgabewert
Die zuvor von der Flagge gehalten, auf die
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.
[Bearbeiten] Ausnahmen
[Bearbeiten] Mögliche Implementierung
First version |
---|
bool atomic_flag_test_and_set(volatile std::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(volatile std::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); } |
[Bearbeiten] Beispiel
Ein Spinlock Mutex kann im Userspace mit einem atomic_flag umgesetzt werden
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 acquired std::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>...
[Bearbeiten] Siehe auch
(C++11) |
Die Lock-freie boolean atomaren Typ 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. (Klasse) |
(C++11) (C++11) |
atomar setzt den Wert der Flagge auf 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. (Funktion) |
(C++11) |
definiert Speicher Bestellung Einschränkungen für den angegebenen atomaren Operation 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
|