草庐IT

原子钟

全部标签

c++ - 如何在 C++ 中创建原子枚举?

类atomic包含atomicversionsofmanydifferentvariabletypes.但是,它不包含原子枚举类型。有没有办法使用原子枚举或自己制作?据我所知,我唯一的选择是要么不使用枚举,要么使用互斥体/信号量来保护它们。注意:这个bugreport我发现提到“std::atomicenumsupport”,但我没有看到C++标准中提到原子枚举类型,所以我不确定它指的是什么。 最佳答案 你可以像这样创建一个原子枚举:#includeenumDecision{stay,flee,dance};std::atomice

c++ - 可以在 C++ 内存模型中合并原子负载吗?

考虑下面的C++11代码段。对于GCC和clang,这编译为两个(顺序一致的)foo负载。(编者注:编译器不优化原子,请参阅thisQ&A了解更多详细信息,尤其是http://wg21.link/n4455标准讨论关于这可能产生的问题,该标准没有为程序员提供解决工具。这个语言律师问答是关于当前标准,而不是编译器所做的。)C++内存模型是否允许编译器将这两个加载合并为一个加载并为x和y使用相同的值?(编者注:这是标准组正在研究的内容:http://wg21.link/n4455和http://wg21.link/p0062。当前纸上标准允许不受欢迎的行为。)我认为它无法合并这些负载,因为

c++ - 可以在 C++ 内存模型中合并原子负载吗?

考虑下面的C++11代码段。对于GCC和clang,这编译为两个(顺序一致的)foo负载。(编者注:编译器不优化原子,请参阅thisQ&A了解更多详细信息,尤其是http://wg21.link/n4455标准讨论关于这可能产生的问题,该标准没有为程序员提供解决工具。这个语言律师问答是关于当前标准,而不是编译器所做的。)C++内存模型是否允许编译器将这两个加载合并为一个加载并为x和y使用相同的值?(编者注:这是标准组正在研究的内容:http://wg21.link/n4455和http://wg21.link/p0062。当前纸上标准允许不受欢迎的行为。)我认为它无法合并这些负载,因为

c++ - 在 x86 中增加一个整数原子吗?

这个问题在这里已经有了答案:Cannum++beatomicfor'intnum'?(13个回答)关闭6年前。在多核x86机器上,假设在core1上执行的线程递增一个整数变量a,同时core2上的线程也递增它。假设a的初始值为0,那么它最终会不会是2呢?或者它可能有其他值(value)?假设a被声明为volatile并且我们没有使用原子变量(例如C++的atomic和gcc中内置的原子操作)。如果在这种情况下a的值确实总是2,这是否意味着x86-64中的longint也将具有相同的属性,即就是说,a到底总是2? 最佳答案 X86上的

c++ - 在 x86 中增加一个整数原子吗?

这个问题在这里已经有了答案:Cannum++beatomicfor'intnum'?(13个回答)关闭6年前。在多核x86机器上,假设在core1上执行的线程递增一个整数变量a,同时core2上的线程也递增它。假设a的初始值为0,那么它最终会不会是2呢?或者它可能有其他值(value)?假设a被声明为volatile并且我们没有使用原子变量(例如C++的atomic和gcc中内置的原子操作)。如果在这种情况下a的值确实总是2,这是否意味着x86-64中的longint也将具有相同的属性,即就是说,a到底总是2? 最佳答案 X86上的

c++ - 混合 C++11 原子和 OpenMP

OpenMP有自己对原子访问的支持,但是,至少有两个原因更喜欢C++11原子:它们更灵活,并且它们是标准的一部分。另一方面,OpenMP比C++11线程库更强大。该标准在两个不同的章节中指定了原子操作库和线程支持库。这让我相信原子访问的组件与使用的线程库有点正交。我真的可以将C++11atomics和OpenMP结合起来吗?有一个很similarquestion在堆栈溢出;但是,由于它的答案没有回答实际问题,因此三年来基本上没有答案。 最佳答案 更新:OpenMP5.0定义了与C++11及进一步的交互。其中,它表示使用以下功能可能会

c++ - 混合 C++11 原子和 OpenMP

OpenMP有自己对原子访问的支持,但是,至少有两个原因更喜欢C++11原子:它们更灵活,并且它们是标准的一部分。另一方面,OpenMP比C++11线程库更强大。该标准在两个不同的章节中指定了原子操作库和线程支持库。这让我相信原子访问的组件与使用的线程库有点正交。我真的可以将C++11atomics和OpenMP结合起来吗?有一个很similarquestion在堆栈溢出;但是,由于它的答案没有回答实际问题,因此三年来基本上没有答案。 最佳答案 更新:OpenMP5.0定义了与C++11及进一步的交互。其中,它表示使用以下功能可能会

C++11 原子和侵入式共享指针引用计数

我正在编写侵入式共享指针并且我正在使用C++11引用柜台的设施。以下是我的代码的相关片段://...mutablestd::atomiccount;//...voidSharedObject::addReference()const{std::atomic_fetch_add_explicit(&count,1u,std::memory_order_consume);}voidSharedObject::removeReference()const{booldestroy;destroy=std::atomic_fetch_sub_explicit(&count,1u,std::mem

C++11 原子和侵入式共享指针引用计数

我正在编写侵入式共享指针并且我正在使用C++11引用柜台的设施。以下是我的代码的相关片段://...mutablestd::atomiccount;//...voidSharedObject::addReference()const{std::atomic_fetch_add_explicit(&count,1u,std::memory_order_consume);}voidSharedObject::removeReference()const{booldestroy;destroy=std::atomic_fetch_sub_explicit(&count,1u,std::mem

c++11 进程间原子和互斥锁

我有一个Linux程序,它产生多个进程(fork)并通过POSIX共享内存进行通信。我想让每个进程分配一个id(0-255)。我的意图是在共享内存区域(初始化为零)中放置一个位vector,然后原子地比较和交换位以分配一个id。有没有对c++11友好的方法来做到这一点?我可以创建一个原子位集吗?我可以跨进程使用互斥锁吗?如何确保构造函数在所有进程中被调用一次且仅调用一次? 最佳答案 C++11线程原语(互斥体、原子等)是线程原语。C++标准不引用进程,并且这些工具中的大多数不跨进程互操作。标准中唯一提到的过程是在一个非规范的符号中表