繁体   English   中英

标准或增强原子无符号字符[32]

[英]Std or boost atomic unsigned char[32]

我试图通过maincin循环设置一个unsigned char[32]并使所有线程都可以访问它。 该方法和传递的重要性不如在每次重置数据时在编译时将数据提供给cores - 1数量为cores - 1所有未知数量的线程都重要。

我可以设想可以按预期工作的方法进行交付的唯一方法是

  1. 将数据传递到将工作发送到cores - 1线程-来自网络的cores - 1线程,然后从那里将其发送到那些线程。 这限制了工作线程的性能,因为它们现在依赖于管理线程,因为并非所有工作都来自管理线程,但是工作线程依赖于最新的unsigned char[32[]
  2. 让每个工作线程在每个循环中检查unsigned char[32]的更改。 由于锁争用,此性能非常糟糕。

我不认为我可以将unsigned char[32]std::atomic 但是,如果这种信念不正确,请告诉我如何做。

因此,我正在研究是否可以使用boost::atomic ,但我在理解局限性时遇到了困难:

使用非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::atomicboost::atomic吗? 如果是这样,怎么办? 如果没有,我的意图如何实现?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM