std::atomic_exchange, std::atomic_exchange_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>
|
||
| template< class T > T atomic_exchange( std::atomic<T>* obj, T desr ); |
(1) | (ya que C + +11) |
| template< class T > T atomic_exchange( volatile std::atomic<T>* obj, T desr ); |
(2) | (ya que C + +11) |
| template< class T > T atomic_exchange_explicit( std::atomic<T>* obj, T desr, |
(3) | (ya que C + +11) |
| template< class T > T atomic_exchange_explicit( volatile std::atomic<T>* obj, T desr, |
(4) | (ya que C + +11) |
Atómicamente sustituye el valor apuntado por
3-4) obj con el valor de desr y devuelve el valor contenido obj anteriormente, como por obj->exhange(desr)Original:
Atomically replaces the value pointed to by
obj with the value of desr and returns the value obj held previously, as if by obj->exhange(desr)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.
Atómicamente sustituye el valor apuntado por
obj con el valor de desr y devuelve el valor contenido obj anteriormente, como por obj->exhange(desr, order)Original:
Atomically replaces the value pointed to by
obj with the value of desr and returns the value obj held previously, as if by obj->exhange(desr, order)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
| obj | - | puntero al objeto atómico modificar
Original: pointer to the atomic object to modify The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
| desr | - | el valor a almacenar en el objeto atómico
Original: the value to store in the atomic object The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
| order | - | sycnhronization la memoria de pedidos para esta operación: todos los valores están permitidos .
Original: the memory sycnhronization ordering for this operation: all values are permitted. 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 retenido previamente por el objeto al que apunta atómica
objOriginal:
The value held previously by the atomic object pointed to by
objThe 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] Ejemplo
Un mutex spinlock puede ser implementado en el espacio de usuario utilizando una operación de intercambio atómico, similar a atomic_flag_test_and_set
Original:
A spinlock mutex can be implemented in userspace using an atomic exchange operation, similar to atomic_flag_test_and_set
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<bool> lock = ATOMIC_VAR_INIT(false); void f(int n) { for(int cnt = 0; cnt < 100; ++cnt) { while(std::atomic_exchange_explicit(&lock, true, std::memory_order_acquire)) ; // spin until acquired std::cout << "Output from thread " << n << '\n'; std::atomic_store_explicit(&lock, false, 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) |
automáticamente reemplazado el valor del objeto atómico y obtiene el valor que tenía antes Original: atomically replaced the value of the atomic object and obtains the value held previously The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (miembro público of std::atomic función)
|
| atómicamente compara el valor del objeto atómica con no atómica argumento y realiza intercambio atómico si carga igual o atómica si no Original: atomically compares the value of the atomic object with non-atomic argument and performs atomic exchange if equal or atomic load if not The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función de plantilla) | |
| se especializa operaciones atómicas para std::shared_ptr Original: specializes atomic operations for std::shared_ptr The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función de plantilla) | |
| C documentation for atomic_exchange, atomic_exchange_explicit
| |