std::atomic_thread_fence
来自cppreference.com
该页由英文版wiki使用Google Translate机器翻译而来。
该翻译可能存在错误或用词不当。鼠标停留在文本上可以看到原版本。你可以帮助我们修正错误或改进翻译。参见说明请点击这里. |
在头文件 <atomic> 中定义
|
||
extern "C" void atomic_thread_fence( std::memory_order order ); |
(C++11 起) | |
建立订货的非原子和轻松的指示,
order
的原子访问,内存同步,而没有相关的原子操作。例如,所有的非原子和宽松的原子店发生之前,std::memory_order_release围栏线程A将被同步的非原子和轻松的原子负载从std::memory_order_acquire围栏后,线程B在相同的位置.原文:
Establishes memory synchronization ordering of non-atomic and relaxed atomic accesses, as instructed by
order
, without an associated atomic operation. For example, all non-atomic and relaxed atomic stores that happen before a std::memory_order_release fence in thread A will be synchronized with non-atomic and relaxed atomic loads from the same locations made in thread B after an std::memory_order_acquire fence.目录 |
[编辑] 参数
order | - | 这个围栏的记忆顺序执行
原文: the memory ordering executed by this fence |
[编辑] 返回值
(无)
[编辑] 例外
[编辑] 的例子
Scan an array of mailboxes, and process only the ones intended for us, without unnecessary synchronization.
const int num_mailboxes = 32; std::atomic<int> mailbox[num_mailboxes]; // The writer threads update non-atomic shared data and then update mailbox[i] as follows std::atomic_store_explicit(&mailbox[i], std::memory_order_release); // Reader thread needs to check all mailbox[i], but only needs to sync with one for (int i = 0; i < num_mailboxes; ++i) { if (std::atomic_load_explicit(&mailbox[i], std::memory_order_relaxed) == my_id) { std::atomic_thread_fence(std::memory_order_acquire); // synchronize with just one writer do_work(i); // guaranteed to observe everything done in the writer thread before // the atomic_store_explicit() } }
[编辑] 另请参阅
(C++11) |
定义内存排序约束给定的原子操作 原文: defines memory ordering constraints for the given atomic operation (typedef) |
(C++11) |
围栏之间的线程和信号处理器,在同一个线程中执行 原文: fence between a thread and a signal handler executed in the same thread (函数) |
C documentation for atomic_thread_fence
|