【发布时间】:2019-06-04 09:18:26
【问题描述】:
我正在修改一些现有的开源库,并且有一个包含位字段的结构(例如命名为 Node),例如
struct Node {
std::atomic<uint32_t> size:30;
std::atomic<uint32_t> isnull:1;
};
为了满足我的需要,这些字段需要是原子的,所以我希望为此使用 std::atomic 并面临编译时错误:
bit-field 'size' has non-integral type 'std::atomic<uint32_t>'
根据文档,有一组受限制的类型可用于 std::atomic
任何人都可以建议/知道如何在对现有源代码影响最小的情况下获得原子字段的功能吗?
提前致谢!
【问题讨论】:
-
没有原子位字段这样的东西。典型的 CPU 根本不提供机器指令来原子地操作位字段。所以 C++ 语言不允许这样的结构,因为它是无法实现的。
-
@IgorTandetnik 在哪个现实世界的 CPU 上无法实现?
-
@curiousguy 在 x86 上,据我所知。至少,不是没有锁或自旋循环。
标签: c++11 concurrency atomic bit-fields