Std or boost atomic unsigned char[32]

Std or boost atomic unsigned char[32]

本文关键字:char unsigned or boost atomic Std      更新时间:2023-10-16

我试图通过main中的cin循环设置unsigned char[32],并使其可访问所有线程。方法和交付并不重要,重要的是能够在编译时(cores - 1)重置数据时使该数据对所有未知数量的线程可用。

我能想到的唯一方法是:

  1. 将数据传递给从网络向cores - 1线程发送工作的线程,然后从那里将数据发送给这些线程。这限制了工作线程的性能,因为它们现在依赖于管理线程,因为不是所有的工作都来自管理线程,但是工作线程依赖于最新的unsigned char[32[]
  2. 让每个工作线程在每个周期检查unsigned char[32]的变化。由于锁争用,这个操作的性能很糟糕。

我不相信我能使用unsigned char[32]std::atomic;但是,如果那个信念是不正确的,请告诉我怎么做。

因此,我正在调查boost::atomic是否可行,但我很难理解其局限性:

使用非pod类作为atomic的模板形参会导致未定义的行为:这意味着任何包含构造函数、析构函数、虚方法或访问控制规范的类在c++ 98中都不是有效的实参。c++ 11稍微放宽了这一点,允许只包含空构造函数的"平凡"类。建议:只使用POD类型

我在POD上发现了这一点,但我仍然不确定unsigned char[32]是否可以根据我的意图安全地与boost::atomic一起使用:

POD是首字母缩略词。它代表"普通的旧数据"。[5,脚注4],旨在建议C和c++中可比数据类型之间的实质性兼容性。术语POD和POD对象通常可以互换使用,表示POD类型的对象。

术语POD类型统称为以下c++类型类别,并包括这些类型的cv限定版本以及这些类型的数组[§3.9,¶10;¶§9日4]:

  • 标量类型和
  • POD类类型。

有很多定义,但我仍然不确定。

unsigned char[32]可以与std::atomicboost::atomic一起使用吗?如果有,怎么做?如果不是,我的意图如何实现?

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