是否存在原子|=操作
Is there an atomic |= operation?
有原子|=
或和原子或这样的东西吗?如果没有,建议在需要线程安全的变量中设置位的技术是什么?(我正在避免锁定)
C++03中没有这样的东西,但您可以使用供应商特定的功能。例如,您可以在窗口上使用InterlockedOr
。在C++0x中,您可以使用atomic_fetch_or
。
请注意,原子操作也需要锁定,尽管它在硬件级别上仍然很昂贵。
您可以使用原子比较和交换(CAS),它可以在您可能需要的任何地方使用,以生成几乎任何操作的原子版本。
看一下_InterlockedOr
的内在特性。这是你能达到的最快速度。
在当前的C++标准中没有这样的想法,但在C++11中会有,它可能会在秋季发布。请参阅:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1401.pdf
我不确定是否已经有编译器支持即将推出的C++标准的部分新线程功能。否则,您将需要进行变通(例如使用Boost)。
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- C++模板来检查友元函数的存在
- 重载操作程序时出错>>用于类中的字符串 memebr
- 既然存在危险,为什么项目要使用-I include开关
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- 对字符串进行位操作
- C++quit()函数中可能存在作用域问题
- 为什么比较和交换操作同时存在免费函数和成员函数?
- std::set::迭代器和std::set::const_iterator之间是否存在操作差异
- 检查成员是否存在并调用它或不执行任何操作
- 如果文件夹不存在,则创建文件夹,如果存在,则不执行任何操作
- 是否存在此操作的操作员
- 是否存在通过引用选择元素和通过指针操作选择元素都有效的情况
- GCC可能存在错误,foreach循环操作的是阴影,而不是实际对象
- 如果存在插入/删除/重新散列操作,则unordered_map复制/释放包含的对象
- 是否存在STL或BOOST映射,如查找和弹出操作的容器
- 是否存在一个c++函数(内置或其他),可以在不重复操作的情况下给出整数除法和模除法的结果
- 是否存在原子|=操作
- 如果在std::map中操作不存在的键值对会发生什么?