是否存在原子|=操作

Is there an atomic |= operation?

本文关键字:操作 存在 是否      更新时间:2023-10-16

有原子|=或和原子或这样的东西吗?如果没有,建议在需要线程安全的变量中设置位的技术是什么?(我正在避免锁定)

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)。