std::atomic_thread_fence
Материал из cppreference.com
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
<metanoindex/>
<tbody> </tbody>| Определено в заголовочном файле <atomic>
|
||
extern "C" void atomic_thread_fence( std::memory_order order ); |
(начиная с C++11) | |
Устанавливает памяти синхронизации упорядочения неатомической и расслабленной атомного доступа, в соответствии с инструкциями
order, не связанные атомарные операции. Например, все без атомной и расслабленной атомного магазинов, которые происходят до std::memory_order_release забор в потоке будут синхронизированы с неатомической и расслабленной атомного грузы из того же места, сделанные в потоке B после std::memory_order_acquire забором.Оригинал:
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.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Параметры
| order | — | памяти упорядочения выполняться с помощью этого забора
Оригинал: the memory ordering executed by this fence Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
Возвращаемое значение
(Нет)
Исключения
спецификация noexcept:
noexceptПримеры
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) |
определяет ограничения порядка памяти для данной атомарной операции (перечисление) |
(C++11) |
барьер между потоком и обработчиком сигнала, выполняемым в этом же потоке (функция) |
Документация C по atomic_thread_fence
| |