是否有原子|=
或和原子或之类的东西?如果没有,在需要线程安全的变量中设置位的推荐技术是什么?(我正在避免锁定)
user34537
问问题
387 次
4 回答
7
C++03 中没有这样的东西,但您可以使用您的供应商特定功能。例如,您可以InterlockedOr
在 Windows 上使用。在 C++0x 中,您可以使用atomic_fetch_or
.
请注意,原子操作也需要锁定,尽管它在硬件级别上仍然很昂贵。
于 2011-06-25T17:06:05.890 回答
4
您可以使用原子比较和交换 (CAS),在您可能需要的任何地方都可以使用它,来制作几乎任何操作的原子版本。
于 2011-06-25T17:49:44.827 回答
3
看看_InterlockedOr
内在。这是您可能获得的最快速度。
于 2011-06-25T17:08:38.337 回答
1
在当前的 C++ 标准中没有这样的想法——但在 C++11 中可能会在秋季发布。见:http ://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1401.pdf
我不确定是否已经有编译器支持即将推出的 C++ 标准的新线程工具的一部分。否则,您将需要解决(例如使用 Boost)。
于 2011-06-25T17:10:15.690 回答