std::atomic_flag_test_and_set, std::atomic_flag_test_and_set_explicit
提供: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. |
| Defined in header <atomic>
|
||
| bool atomic_flag_test_and_set( volatile std::atomic_flag* p ); |
(1) | (C + + 11以来) |
| bool atomic_flag_test_and_set( std::atomic_flag* p ); |
(2) | (C + + 11以来) |
| bool atomic_flag_test_and_set_explicit( volatile std::atomic_flag* p, std::memory_order order ); |
(3) | (C + + 11以来) |
| bool atomic_flag_test_and_set_explicit( std::atomic_flag* p, std::memory_order order ); |
(4) | (C + + 11以来) |
アトミックに設定するstd::atomic_flag(
p)が指すtrueの状態を変更し、それが前に保持されている値を返します。. Original:
Atomically changes the state of a std::atomic_flag pointed to by
p to set (true) and returns the value it held before. 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.
目次 |
[編集] パラメータ
| p | - | アクセスするstd::atomic_flagへのポインタ
Original: pointer to std::atomic_flag to access The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
| order | - | この操作には、メモリーを同期順序
Original: the memory synchronization order for this operation The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
[編集] 値を返します
以前
pが指すフラグが保持している値Original:
The value previously held by the flag pointed to by
pThe 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.
[編集] 例外
[編集] 可能な実装
| First version |
|---|
bool atomic_flag_test_and_set(volatile std::atomic_flag* p) { return p->test_and_set(); } |
| Second version |
bool atomic_flag_test_and_set(std::atomic_flag* p) { return p->test_and_set(); } |
| Third version |
bool atomic_flag_test_and_set_explicit(volatile std::atomic_flag* p, std::memory_order order) { return p->test_and_set(order); } |
| Fourth version |
bool atomic_flag_test_and_set_explicit(std::atomic_flag* p, std::memory_order order) { return p->test_and_set(order); } |
[編集] 例
スピンロックmutexはatomic_flagを使用してユーザ空間で実装することができます
Original:
A spinlock mutex can be implemented in userspace using an atomic_flag
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_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)) ; // spin until the lock is acquired 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:
Output from thread 2 Output from thread 6 Output from thread 7 ...<exactly 1000 lines>...
[編集] も参照してください
| (C++11) |
ロックフリーブール原子型 Original: the lock-free boolean atomic type The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (クラス) |
| (C++11) (C++11) |
アトミックfalseにフラグの値が設定されます Original: atomically sets the value of the flag to false The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (機能) |
| (C++11) |
与えられたアトミック操作用のメモリ順序の制約を定義しています Original: defines memory ordering constraints for the given atomic operation The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (typedefです) |
| C documentation for atomic_flag_test_and_set, atomic_flag_test_and_set_explicit
| |