Пространства имён
Варианты
Действия

std::atomic_thread_fence

Материал из cppreference.com
< cpp‎ | atomic

Определено в заголовочном файле <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
  (начиная с C++11)

[править] Примеры

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()
    }
 }


[править] См. также

определяет памяти заказе ограничений для данного атомарные операции
Оригинал:
defines memory ordering constraints for the given atomic operation
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(определение типа) [edit]
забор между нитью и обработчик сигнала выполняется в том же потоке
Оригинал:
fence between a thread and a signal handler executed in the same thread
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [edit]
C documentation for atomic_thread_fence