std::atomic_exchange, std::atomic_exchange_explicit
Da 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. |
Definido no cabeçalho <atomic> | ||
template<class T > T atomic_exchange(std::atomic<T>* obj, T desr ); | (1) | (desde C++11) |
template<class T > T atomic_exchange(volatilestd::atomic<T>* obj, T desr ); | (2) | (desde C++11) |
template<class T > T atomic_exchange_explicit(std::atomic<T>* obj, T desr, | (3) | (desde C++11) |
template<class T > T atomic_exchange_explicit(volatilestd::atomic<T>* obj, T desr, | (4) | (desde C++11) |
Atomicamente substitui o valor apontado por
3-4) obj
com o valor de desr
e retorna o valor obj
realizada 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.
Atomicamente substitui o valor apontado por
obj
com o valor de desr
e retorna o valor obj
realizada 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.
Índice |
[editar]Parâmetros
obj | - | ponteiro para o 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 | - | o valor para armazenar no 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 | - | o sycnhronization memória de ordenação para esta operação: todos os valores são 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
O valor realizado anteriormente pelo objeto atômico apontado por
obj
Original:
The value held previously by the atomic object pointed to by
obj
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.
[editar]Exceções
[editar]Exemplo
Um mutex spinlock pode ser implementado no userspace usando uma operação de troca de atómica, semelhante ao 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 acquiredstd::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();}}
Saída:
Output from thread 2 Output from thread 6 Output from thread 7 ...<exactly 1000 lines>...
[editar]Veja também
(C++11) | atomicamente substituiu o valor do objeto atômico e obtém o valor retido anteriormente 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. (of std::atomic função pública membro) |
atomicamente compara o valor do objeto atômico com não atômica argumento e realiza troca atômica se carga igual ou atômica se não 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. (modelo de função) | |
especializada operações 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. (modelo de função) | |
Documentação C para atomic_exchange, atomic_exchange_explicit |