jjzjj

stdatomic

全部标签

c++ - 比较并交换C++ 0x

从关于C++原子类型和操作的C++0xproposal中:29.1OrderandConsistency[atomics.order]Addanewsub-clausewiththefollowingparagraphs.Theenumerationmemory_orderspecifiesthedetailedregular(non-atomic)memorysynchronizationorderasdefinedin[thenewsectionaddedbyN2334oritsadoptedsuccessor]andmayprovideforoperationordering.I

c++ - 比较并交换C++ 0x

从关于C++原子类型和操作的C++0xproposal中:29.1OrderandConsistency[atomics.order]Addanewsub-clausewiththefollowingparagraphs.Theenumerationmemory_orderspecifiesthedetailedregular(non-atomic)memorysynchronizationorderasdefinedin[thenewsectionaddedbyN2334oritsadoptedsuccessor]andmayprovideforoperationordering.I

c++ - 显式原子加载/存储与通常的 operator= 和 operator T 有什么区别?

考虑这两种变体:std::atomica;a=1;intb=a;和std::atomica;a.store(1);intb=a.load();我从文档中看到第二个是完全原子的,但是我不明白什么时候应该使用哪个以及详细的区别是什么。 最佳答案 这两个例子是等价的;operator=和operatorT被定义为分别相当于调用store和load,默认值为memory_order参数。如果您对该默认值感到满意,memory_order_seq_cst,以便每次访问都充当内存栅栏,那么请使用您认为更好的那个。如果要指定不同的值,则需要使用函

c++ - 显式原子加载/存储与通常的 operator= 和 operator T 有什么区别?

考虑这两种变体:std::atomica;a=1;intb=a;和std::atomica;a.store(1);intb=a.load();我从文档中看到第二个是完全原子的,但是我不明白什么时候应该使用哪个以及详细的区别是什么。 最佳答案 这两个例子是等价的;operator=和operatorT被定义为分别相当于调用store和load,默认值为memory_order参数。如果您对该默认值感到满意,memory_order_seq_cst,以便每次访问都充当内存栅栏,那么请使用您认为更好的那个。如果要指定不同的值,则需要使用函

c++ - 是否有必要使用 std::atomic 来表示线程已完成执行?

我想检查std::thread已完成执行。搜索stackoverflow我发现了以下question它解决了这个问题。接受的答案建议让工作线程在退出之前设置一个变量并让主线程检查这个变量。以下是此类解决方案的一个最小工作示例:#include#includevoidwork(bool*signal_finished){sleep(5);*signal_finished=true;}intmain(){boolthread_finished=false;std::threadworker(work,&thread_finished);while(!thread_finished){//d

c++ - 是否有必要使用 std::atomic 来表示线程已完成执行?

我想检查std::thread已完成执行。搜索stackoverflow我发现了以下question它解决了这个问题。接受的答案建议让工作线程在退出之前设置一个变量并让主线程检查这个变量。以下是此类解决方案的一个最小工作示例:#include#includevoidwork(bool*signal_finished){sleep(5);*signal_finished=true;}intmain(){boolthread_finished=false;std::threadworker(work,&thread_finished);while(!thread_finished){//d

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++ - 使用 4 个线程获取/释放语义

我目前正在阅读AnthonyWilliams的C++ConcurrencyinAction。他的一个list显示了这段代码,他声明了z!=0的断言。可以火。#include#include#includestd::atomicx,y;std::atomicz;voidwrite_x(){x.store(true,std::memory_order_release);}voidwrite_y(){y.store(true,std::memory_order_release);}voidread_x_then_y(){while(!x.load(std::memory_order_acqu

c++ - 使用 4 个线程获取/释放语义

我目前正在阅读AnthonyWilliams的C++ConcurrencyinAction。他的一个list显示了这段代码,他声明了z!=0的断言。可以火。#include#include#includestd::atomicx,y;std::atomicz;voidwrite_x(){x.store(true,std::memory_order_release);}voidwrite_y(){y.store(true,std::memory_order_release);}voidread_x_then_y(){while(!x.load(std::memory_order_acqu