Kno*_*abe 3 c++ atomic c++11 stdatomic
如果我有一个原子变量,例如,
std::atomic<int> x;
Run Code Online (Sandbox Code Playgroud)
我想对它执行读写操作,我可以使用"普通"语法,例如,
std::cout << x; // read from x
x = 5; // write to x
Run Code Online (Sandbox Code Playgroud)
我也可以使用显式load和store成员函数:
std::cout << x.load(); // read from x
x.store(5); // write to x
Run Code Online (Sandbox Code Playgroud)
我见过Andrei Alexandrescu和Anthony Williams等人的建议只使用了表达load和store形式,大概是因为"正常"形式并没有强调变量是原子的.这似乎就像一种匈牙利符号.是否有关于在读写原子时使用的语法的新兴惯例?
Ker*_* SB 10
有几个操作被重载为"按你的想法做",并通过顺序一致的内存排序来完成这项操作.所以:
int n = x;是一样的int n = x.load(std::memory_order_seq_cst),和x = 1是一样的x.store(1, std::memory_order_seq_cst).但是,如果您想要任何类型的轻松内存排序,则需要使用显式成员函数,例如int n = x.load(std::memory_order_acquire).
我们的想法是,"自然"外观代码通常是正确的(回想一下"顺序一致的数据竞争程序"执行模型),但风险更大,更积极的操作是可用的 - 它们只需要明确.
| 归档时间: |
|
| 查看次数: |
560 次 |
| 最近记录: |