在线文档教程
C++

std::atomic_flag_test_and_set

STD::原子[医]旗子[医]试验[医]和[医]SET,STD::原子[医]旗子[医]试验[医]和[医]集[医]显式

Defined in header
(1)(since C++11)
bool atomic_flag_test_and_set( volatile std::atomic_flag* p
bool atomic_flag_test_and_set( std::atomic_flag* p
(2)(since C++11)
bool atomic_flag_test_and_set_explicit( volatile std::atomic_flag* p, std::memory_order order
bool atomic_flag_test_and_set_explicit( std::atomic_flag* p, std::memory_order order

原子地更改std::atomic_flag指...p设置%28true%29并返回它以前持有的值。

参数

p-pointer to std::atomic_flag to access
order-the memory synchronization order for this operation

返回值

所指向的标志以前持有的值。p...

例外

noexcept规格:

noexcept

可能的实施

第一版

*。

布尔原子[医]旗子[医]试验[医]和[医]设置%28易失性STD::原子[医]旗子%2AP%29{回归p->检验[医]和[医]设置%28%29;}

第二版

布尔原子[医]旗子[医]试验[医]和[医]设置%28std::原子[医]旗子%2AP%29{回归p->检验[医]和[医]设置%28%29;}

第三版

布尔原子[医]旗子[医]试验[医]和[医]集[医]显式%28易失性STD::原子[医]旗子%2AP,STD::内存[医]订单%29{返回p->测试[医]和[医]设置%28 Order%29;}

第四版

布尔原子[医]旗子[医]试验[医]和[医]集[医]显式%28 std::原子[医]旗子%2AP,STD::内存[医]订单%29{返回p->测试[医]和[医]设置%28 Order%29;}

自旋锁互斥体可以在用户空间中使用原子实现。[医]旗子。

二次

#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 from thread 2 Output from thread 6 Output from thread 7 ...<exactly 1000 lines>...

二次

另见

atomic_flag (C++11)the lock-free boolean atomic type (class)
atomic_flag_clearatomic_flag_clear_explicit (C++11)(C++11)atomically sets the value of the flag to false (function)
memory_order (C++11)defines memory ordering constraints for the given atomic operation (typedef)

C原子文档[医]旗子[医]试验[医]和[医]集合,原子的[医]旗子[医]试验[医]和[医]集[医]显式

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/原子/原子[医]旗子[医]试验[医]和[医]集