草庐IT

atomic-long

全部标签

报错:JSON parse error: Cannot deserialize value of type `long` from String “1,2“: not a valid `long` v

详细报错信息JSON parse error: Cannot deserialize value of type `long` from String "1,2": not a valid `long` value; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `long` from String "1,2": not a valid `long` value at [Source: (org.springframe

c++ - 为什么 64 位 GCC 在分配数组时警告将 const int 转换为 long unsigned int?

我有一个如下所示的文件test.cpp:voidf(constintn){unsignedchar*a=newunsignedchar[n];delete[]a;}intmain(){f(4);return0;}使用-Wsign-conversion在64位GCC中编译它标志产生警告:test.cpp:2:39:warning:conversionto‘longunsignedint’from‘constint’maychangethesignoftheresult[-Wsign-conversion](第2行是调用new的行)。我觉得GCC应该发出关于分配数组的警告似乎很奇怪,但下面

c++ - 为什么 std::atomic 中的所有成员函数都带有和不带有 volatile?

我注意到std::atomic的大多数成员函数类型被声明了两次,一次是用volatile修饰符,一次没有(example))。我检查了G++标准库实现的源代码,发现它们都是完全相同的,例如,boolload(memory_order__m=memory_order_seq_cst)constnoexcept{return_M_base.load(__m);}boolload(memory_order__m=memory_order_seq_cst)constvolatilenoexcept{return_M_base.load(__m);}我找不到任何volatile的例子变体的行为不

c++ - 防止 std::atomic 溢出

我有一个原子计数器(std::atomiccount),它向多个线程处理顺序递增的值。uint32_tmy_val=++count;在我得到my_val之前我想确保增量不会溢出(即:回到0)if(count==std::numeric_limits::max())throwstd::runtime_error("countoverflow");我认为这是一个天真的检查,因为如果在递增计数器之前由两个线程执行检查,则第二个要递增的线程将返回0if(count==std::numeric_limits::max())//if2threadsexecutethisthrowstd::runt

c++ - 以 long long 数字打印位 (C++)

我想打印一个longlong数字的所有位。当我在main()中执行时,一切都很好,但在printBits()函数(代码相同)中,第32位有一个额外的1。代码:#includevoidprintBits(longlongnumber){std::cout";for(chari=63;i>=0;--i){std::cout";for(chari=63;i>=0;--i){std::cout结果是:1->00000000000000000000000000000000000000000000000000000000000000011->0000000000000000000000000000

c++ - std::atomic<X>::value_type 发生了什么?

根据thisreferencemanualForeverystd::atomic(whetherornotspecialized),std::atomic::value_typeisX.但是如果我尝试使用这种类型,我会得到一个编译错误。我用g++8.2.1试过了:$g++-std=c++11test.cctest.cc:Infunction‘intmain()’:test.cc:6:23:error:‘value_type’isnotamemberof‘std::atomic’std::atomic::value_typex=0;还有clang6.0.1$clang-std=c++11

c++ - 我可以通过 reinterpret_cast 将 int 的空指针转换为 long 类型吗

int*pt=0;longi=reinterpret_cast(pt);我保证为0吗?这是明确定义的还是实现定义的?我检查了c++标准,但它只说明了Apointertoadataobjectortoafunction(butnotapointertomember)canbeconvertedtoanyintegertypelargeenoughtocontainit.在这种情况下,pt不指向任何数据对象。该规则适用于这种情况吗? 最佳答案 否,i不一定是任何值。结果是实现定义的。†在C++中,指针的表示是实现定义的,包括空指针的表示

c++ - 为什么在我的 64 位机器上 double 和 long double 完全一样?

这个问题听起来像是针对初学者的,但是当我发现这个问题时,我想我要么是初学者,要么我的comp缺少一些东西:intmain(){cout程序输出:881515我以为longdouble是10个字节,有18个十进制数字,而double是8个字节,有15个数字,但看来我错了。为什么会这样?在64位机器上使用MSVC2010。 最佳答案 如您所知,在MSVC++中,longdouble是double的同义词。显然这是为了利用仅限于64位操作的SSE/SSE2/SSE3指令集。另见here获取更多信息。

c++ - 两个 std::atomic 可以成为一个 union 的一部分吗?

我想这样做:union{std::atomicu128;struct{std::atomicu64_1;std::atomicu64_2;};};多个线程将读取和写入union的两个部分。安全吗?编辑:我使用Linux,x86_64,clang3.3Edit2:我希望能够递增和递减u64_1,读取u64_2,并写入u128(compare_exchange)Edit3:如果我使用atomicbuiltinfunctions会怎么样??union将如下所示:union{uint128_tu128;struct{uint64_tu64_1;uint64_tu64_2;};};u64_1将映

c++ - unsigned long long 与 uint64_t 冲突?

这个问题在这里已经有了答案:longlongintvs.longintvs.int64_tinC++(3个答案)关闭7年前。我们对某些类型参数使用模板特化classmy_template_class:publicmy_template_class_base{....}classmy_template_class:publicmy_template_class_base{....}这与gcc的64位编译完美配合。而当我们尝试32位模式时,它会报告上述两个类的“先前定义”。所以unsignedlonglong在32位编译中与uint64_t相同,但在64位编译中则不同?编译区别是CXX标志