有没有原子性的|=
或者原子或操作?如果没有,那么在需要线程安全的变量中设置位的推荐技术是什么?(我避免使用锁)
有没有原子性的|=
或者原子或操作?如果没有,那么在需要线程安全的变量中设置位的推荐技术是什么?(我避免使用锁)
在C++03中没有这样的东西,但是您可以使用供应商特定的功能。例如,在Windows上可以使用InterlockedOr
。在C++0x中,您可以使用atomic_fetch_or
。
请注意,原子操作也需要锁定,尽管它在硬件级别上仍然很昂贵。
在当前的C++标准中,没有这样的功能 - 但是在C++11中将会有,该版本可能会在秋季发布。请参见:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1401.pdf
我不确定是否已经有编译器支持即将推出的C++标准的新线程工具的部分功能。否则,您需要使用解决方法(例如Boost)。