Cpp-standard-library-cpp-atomic-flag-clear

提供:Dev Guides
移動先:案内検索

C ++アトミックライブラリ-フラグクリア

説明

フラグの値をアトミックにfalseに設定します。

宣言

以下は、std
atomic_flag_clearの宣言です。
void atomic_flag_clear( std::atomic_flag* p );

C 11

void atomic_flag_clear( volatile std::atomic_flag* p );
以下は、std
atomic_flag_clear_explicitの宣言です。
void atomic_flag_clear_explicit( std::atomic_flag* p,
                                 std::memory_order order );

C 11

void atomic_flag_clear_explicit( volatile std::atomic_flag* p,
                                 std::memory_order order );

パラメーター

  • p -アクセスするstd :: atomic_flagへのポインタで使用されます。
  • order -この操作のメモリ順序を同期するために使用されます。

戻り値

none

例外

*No-noexcept* -このメンバー関数は例外をスローしません。

以下のstd
atomic_flag_test_and_set_explicitの例。
#include <thread>
#include <vector>
#include <iostream>
#include <atomic>

std::atomic_flag lock = ATOMIC_FLAG_INIT;

void f(int n) {
   for (int cnt = 0; cnt < 100; ++cnt) {
      while(std::atomic_flag_test_and_set_explicit(&lock, std::memory_order_acquire))
         ;
         std::cout << "Output from thread " << n << '\n';
         std::atomic_flag_clear_explicit(&lock, 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 from thread 0
Output from thread 1
Output from thread 0
Output from thread 0
Output from thread 1
Output from thread 1
Output from thread 0
Output from thread 0
Output from thread 1
Output from thread 0
....................