std或boost原子unsigned char [32]

时间:2014-05-08 21:57:16

标签: c++ arrays boost char atomic

我正在尝试通过unsigned char[32]中的cin循环设置main,并使其可供所有线程访问。在重置数据时,方法和交付不如在编译时cores - 1为所有未知数字的线程提供此数据的能力重要。

我能用预期的方法设想这种交付的唯一方法是

  1. 将数据传递给从网络向cores - 1线程发送工作的线程,然后将其从那里发送到这些线程。这限制了工作线程的性能,因为它们现在依赖于管理线程,因为并非所有工作都来自管理线程,但工作线程依赖于最新的unsigned char[32[]
  2. 让每个工作线程检查每个周期unsigned char[32]的更改。由于锁定争用,这种表现非常糟糕。
  3. 我不相信我能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吗?如果是这样,怎么样?如果没有,我的意图如何实施?

1 个答案:

答案 0 :(得分:1)

您可以改为使用std::atomic<std::array<unsigned char, 32>>