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. |
| Defined in header <atomic>
|
||
| bool atomic_flag_test_and_set( volatile std::atomic_flag* p ); |
(1) | (ya que C + +11) |
| bool atomic_flag_test_and_set( std::atomic_flag* p ); |
(2) | (ya que C + +11) |
| bool atomic_flag_test_and_set_explicit( volatile std::atomic_flag* p, std::memory_order order ); |
(3) | (ya que C + +11) |
| bool atomic_flag_test_and_set_explicit( std::atomic_flag* p, std::memory_order order ); |
(4) | (ya que C + +11) |
Atómicamente cambia el estado de un std::atomic_flag apuntado por
p establecer (true) y devuelve el valor que se celebrará antes . 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.
Contenido |
[editar] Parámetros
| p | - | puntero a std::atomic_flag acceder
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 | - | el orden de sincronización de la memoria para esta operación
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. |
[editar] Valor de retorno
El valor anteriormente en manos de la bandera a la que apunta
pOriginal:
The value previously held by the flag pointed to by
pThe 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.
[editar] Excepciones
[editar] Posible implementación
| 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); } |
[editar] Ejemplo
Un mutex spinlock puede ser implementado en el espacio de usuario utilizando 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 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>...
[editar] Ver también
| (C++11) |
el bloqueo libre de tipo atómico booleano 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. (clase) |
| (C++11) (C++11) |
atómicamente establece el valor de la bandera 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. (función) |
| (C++11) |
define las limitaciones de memoria de pedido para la operación dada atómica 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
| |