我正在尝试通过unsigned char[32]
中的cin
循环设置main
,并使其可供所有线程访问。在重置数据时,方法和交付不如在编译时cores - 1
为所有未知数字的线程提供此数据的能力重要。
我能用预期的方法设想这种交付的唯一方法是
cores - 1
线程发送工作的线程,然后将其从那里发送到这些线程。这限制了工作线程的性能,因为它们现在依赖于管理线程,因为并非所有工作都来自管理线程,但工作线程依赖于最新的unsigned char[32[]
unsigned char[32]
的更改。由于锁定争用,这种表现非常糟糕。我不相信我能unsigned char[32]
使用std::atomic
;但是,如果这种看法不正确,请告诉我如何。
因此,我正在调查是否可以使用boost::atomic
,但我无法理解limitations:
将非POD类作为模板参数用于原子导致未定义的行为:这意味着包含构造函数,析构函数,虚方法或访问控制规范的任何类都不是C ++ 98中的有效参数。 C ++ 11通过允许只包含空构造函数的“普通”类来放松这一点。建议:仅使用POD类型。
我在POD上发现了这一点,但我仍然不确定unsigned char[32]
是否可以根据我的意图安全地使用boost::atomic
:
术语POD是首字母缩略词。它代表“普通旧数据”[p。 5,脚注4],旨在提出C和C ++中可比数据类型之间实质兼容的领域。术语POD和POD对象通常可互换使用,以指代POD类型的对象。
术语POD类型统称为以下类别的C ++类型,包括这些类别的cv限定版本以及这些类型的数组[§3.9,¶10; §9,¶4]:
- 标量类型和
- POD类类型。
许多定义如下,但我仍然不确定。
unsigned char[32]
或std::atomic
可以使用boost::atomic
吗?如果是这样,怎么样?如果没有,我的意图如何实施?
答案 0 :(得分:1)
您可以改为使用std::atomic<std::array<unsigned char, 32>>
。