Std or boost atomic unsigned char[32]
Std or boost atomic unsigned char[32]
我试图通过main
中的cin
循环设置unsigned char[32]
,并使其可访问所有线程。方法和交付并不重要,重要的是能够在编译时(cores - 1
)重置数据时使该数据对所有未知数量的线程可用。
我能想到的唯一方法是:
- 将数据传递给从网络向
cores - 1
线程发送工作的线程,然后从那里将数据发送给这些线程。这限制了工作线程的性能,因为它们现在依赖于管理线程,因为不是所有的工作都来自管理线程,但是工作线程依赖于最新的unsigned char[32[]
。 - 让每个工作线程在每个周期检查
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::atomic
或boost::atomic
一起使用吗?如果有,怎么做?如果不是,我的意图如何实现?
您可以使用std::atomic<std::array<unsigned char, 32>>
。
相关文章:
- 如何使用多次 memcpy 转换回 std::vector<unsigned char>?
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- C++ - 从 "int" 到 "unsigned char" 的缩小转换无效
- 让 'std::vector<unsigned char>' 从 'std::string' 中窃取内存
- 无法从'unsigned short [9]'转换为'char []'
- 使用外部变量会导致"unsigned char"错误LNK2001
- CPPrestsdk (Casablanca) JSON 值到 std::vector<unsigned char>
- memcpy unsigned char to int
- 有没有办法将 vector<unsigned char> 插入 postgresql 表中,具有 bytea 属性,没有 UTF8 编码错误?
- 没有匹配函数来调用"std::basic_ofstream<char>::write(std::string*, long long unsigned int)"
- 将数据从 vector<unsigned char> 传输到无符号 char[]
- 如何修复此 OpenCV 错误:断言失败((无符号)i < (无符号)cn) 在 cv::Vec<unsigned char,3>:::运算符 (), 文件
- 你什么时候会使用"signed char"而不是"unsigned char"?
- 错误:初始化时无法将'const unsigned char (*)[7]'转换为'const unsigned char (*)[]'
- 如何将std :: string传递到C 中的const unsigned char **
- 类型 "unsigned char *" 的参数与类型 "const char *" 的参数不兼容
- C 如何在功能调用中从char *转换为unsigned char *
- 从'byte* {aka unsigned char*}'到'dword {aka长unsigned int}'失去精度
- 'unsigned short var'与'unsigned char var [2]' C++
- C++ cast char * to unsigned char