草庐IT

atomic_flag

全部标签

c++ - 从 Makefile 中的 C++FLAGS 中删除标志?

我有一个Makefile,其中包含另一个设置许多默认值的makefile。我无法编辑包含的makefile,并且我想更改我的makefile中C++FLAGS的值,即使它是在包含的makefile中设置的。具体来说,每当debug=1时,我想从C++FLAGS中删除优化标志。我尝试了以下方法:C++FLAGS=$(filter-out-O3,$(C++FLAGS))失败并出现以下错误:Recursivevariable`C++FLAGS'referencesitself(eventually).Stop.好像做这样的事情应该是可能的,有人知道其中的secret吗?

c++ - std::atomic 应该是易变的吗?

我正在运行一个线程,该线程一直运行到设置标志为止。std::atomicstop(false);voidf(){while(!stop.load(std::memory_order_{relaxed,acquire})){do_the_job();}}我想知道编译器是否可以像这样展开循环(我不希望它发生)。voidf(){while(!stop.load(std::memory_order_{relaxed,acquire})){do_the_job();do_the_job();do_the_job();do_the_job();...//unrollasmanyasthecompi

c++ - std::atomic 应该是易变的吗?

我正在运行一个线程,该线程一直运行到设置标志为止。std::atomicstop(false);voidf(){while(!stop.load(std::memory_order_{relaxed,acquire})){do_the_job();}}我想知道编译器是否可以像这样展开循环(我不希望它发生)。voidf(){while(!stop.load(std::memory_order_{relaxed,acquire})){do_the_job();do_the_job();do_the_job();do_the_job();...//unrollasmanyasthecompi

c++ - 使用基于编译器的 cmake 条件 CXX_FLAGS?

我刚刚开始在一些个人和学校项目中使用CMake,但遇到了一个小问题。假设我试图让一个C++程序在多个编译器(在本例中为g++、cl和bcc32)下编译。我对每个编译器都有不同的命令行开关,我试图做的是基本上创建一个gnu/ms/borland目录并在其中创建CMake东西(通过输入目录并执行cmake-DCMAKE_CXX_COMPILER=g++..在gnu目录中,例如)。在顶级目录的CMakeLists.txt中,我尝试按照以下方式进行操作:if(CMAKE_CXX_COMPILERSTREQUALg++)set(CMAKE_CXX_FLAGS"-Wextra-Wall-ansi-

c++ - 使用基于编译器的 cmake 条件 CXX_FLAGS?

我刚刚开始在一些个人和学校项目中使用CMake,但遇到了一个小问题。假设我试图让一个C++程序在多个编译器(在本例中为g++、cl和bcc32)下编译。我对每个编译器都有不同的命令行开关,我试图做的是基本上创建一个gnu/ms/borland目录并在其中创建CMake东西(通过输入目录并执行cmake-DCMAKE_CXX_COMPILER=g++..在gnu目录中,例如)。在顶级目录的CMakeLists.txt中,我尝试按照以下方式进行操作:if(CMAKE_CXX_COMPILERSTREQUALg++)set(CMAKE_CXX_FLAGS"-Wextra-Wall-ansi-

c++ - 为什么 std::atomic 对象不可复制?

似乎std::atomic类型不是可复制构造或可复制分配的。为什么?无法复制原子类型是否有技术原因?还是有意限制接口(interface)以避免某种不良代码? 最佳答案 在没有原子指令的平台上(或没有针对所有整数大小的原子指令),类型可能需要包含互斥体以提供原子性。互斥体通常不可复制或移动。为了保持std::atomic的所有专业的界面一致在所有平台上,这些类型永远不可复制。 关于c++-为什么std::atomic对象不可复制?,我们在StackOverflow上找到一个类似的问题:

c++ - 为什么 std::atomic 对象不可复制?

似乎std::atomic类型不是可复制构造或可复制分配的。为什么?无法复制原子类型是否有技术原因?还是有意限制接口(interface)以避免某种不良代码? 最佳答案 在没有原子指令的平台上(或没有针对所有整数大小的原子指令),类型可能需要包含互斥体以提供原子性。互斥体通常不可复制或移动。为了保持std::atomic的所有专业的界面一致在所有平台上,这些类型永远不可复制。 关于c++-为什么std::atomic对象不可复制?,我们在StackOverflow上找到一个类似的问题:

c++ - 标准 C++11 是否保证 `volatile atomic<T>` 具有两种语义( volatile + 原子)?

众所周知,std::atomic和volatile是不同的东西。有两个主要区别:两个优化可以用于std::atomica;,但不能用于volatileinta;:融合操作:a=1;a=2;可以由a=2;上的编译器替换不断传播:a=1;local=a;可以由a=1;local=1;上的编译器替换跨原子/volatile操作的普通读/写重新排序:为volatileinta;任何volatile读/写操作都不能重新排序。但是附近的普通读/写仍然可以围绕volatile读/写重新排序。为std::atomica;基于用于原子操作的内存屏障限制附近普通读/写的重新排序a.load(std::me

c++ - 标准 C++11 是否保证 `volatile atomic<T>` 具有两种语义( volatile + 原子)?

众所周知,std::atomic和volatile是不同的东西。有两个主要区别:两个优化可以用于std::atomica;,但不能用于volatileinta;:融合操作:a=1;a=2;可以由a=2;上的编译器替换不断传播:a=1;local=a;可以由a=1;local=1;上的编译器替换跨原子/volatile操作的普通读/写重新排序:为volatileinta;任何volatile读/写操作都不能重新排序。但是附近的普通读/写仍然可以围绕volatile读/写重新排序。为std::atomica;基于用于原子操作的内存屏障限制附近普通读/写的重新排序a.load(std::me

c++ - 具有 std::atomic 成员变量的类的复制构造函数/赋值运算符出错

我有一个像下面这样的类(class)。#includestaticconstlongmyValue=0;classSequence{public:Sequence(longinitial_value=myValue):value_(initial_value){}private:std::atomicvalue_;};intmain(){SequencefirstSequence;SequencesecondSequence=firstSequence;return0;}我收到这样的编译错误,test.cpp:21:36:error:useofdeletedfunction‘Seque