草庐IT

atomic-long

全部标签

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++ - 整数常量对于 "long"类型来说太大了

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:longlonginC/C++为项目欧拉问题编写一个简单的程序。拒绝编译,因为“整数常量对于“long”类型来说太大了”,即使它应该在unsignedlonglong的大小限制内。使用dev-c++编译器。有问题的代码:#includeboolisprime(unsignedlonglongi){if(i==1||i==0)returnfalse;if(i==2)returntrue;for(unsignedlonglongk=2;k!=i-1;k++){if(i%k==0)returnfalse;}retu

c++ - 整数常量对于 "long"类型来说太大了

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:longlonginC/C++为项目欧拉问题编写一个简单的程序。拒绝编译,因为“整数常量对于“long”类型来说太大了”,即使它应该在unsignedlonglong的大小限制内。使用dev-c++编译器。有问题的代码:#includeboolisprime(unsignedlonglongi){if(i==1||i==0)returnfalse;if(i==2)returntrue;for(unsignedlonglongk=2;k!=i-1;k++){if(i%k==0)returnfalse;}retu

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++ - 为什么 common_type<long, unsigned long>::type = long long?

common_type::type是unsignedlong因为关于积分提升后的操作数,标准说...[...]iftheoperandthathasunsignedintegertypehasrankgreaterthanorequaltotherankofthetypeoftheotheroperand,theoperandwithsignedintegertypeshallbeconvertedtothetypeoftheoperandwithunsignedintegertype不要称积分提升系统有问题,但似乎如果有更大的有符号整数类型可以表示有符号和无符号操作数的范围,则应该使

c++ - 为什么 common_type<long, unsigned long>::type = long long?

common_type::type是unsignedlong因为关于积分提升后的操作数,标准说...[...]iftheoperandthathasunsignedintegertypehasrankgreaterthanorequaltotherankofthetypeoftheotheroperand,theoperandwithsignedintegertypeshallbeconvertedtothetypeoftheoperandwithunsignedintegertype不要称积分提升系统有问题,但似乎如果有更大的有符号整数类型可以表示有符号和无符号操作数的范围,则应该使