我知道位域(bit-field)是与编译器相关的,但我没有找到关于最新的g++和Visual C++ 2010中位域在线程安全方面的文档。
对位域成员进行的操作是否是原子的?
我知道位域(bit-field)是与编译器相关的,但我没有找到关于最新的g++和Visual C++ 2010中位域在线程安全方面的文档。
对位域成员进行的操作是否是原子的?
如果你想以线程安全的方式更新位域,你需要将位域拆分为单独的标志,并使用常规的int
来存储它们。访问单独的机器字是线程安全的(尽管你需要考虑多处理器系统上的优化和缓存一致性)。
只需简单使用atomic.AddInt32 示例:
atomic.AddInt32(&intval, 1 << 0) //set the first bit
atomic.AddInt32(&intval, 1 << 1) //set the second bit
atomic.AddInt32(&intval, -(1 << 1 + 1 << 0)) //clear the first and second bit
这段代码是用Go语言编写的,我认为C++也有类似于atomic.AddInt32的函数。