草庐IT

atomic-long

全部标签

c++ - 在 MPI 中对 cout 的 "atomic"调用

我感兴趣的是OpenMPI中是否有命令或技术来进行原子调用以写入stdout(或者就此而言,任何流)。我注意到,在MPI程序的执行过程中,写入cout(或其他流)的调用可能会变得困惑,因为每个proc都可能在到达特定代码段时写入。报告结果时,一行可以被多个proc写入,混淆了问题。所以2个不同的过程可能会做这样的事情://Proc10-resultscalculatedsomewhereabove//result1=10//result2=11cout和://Proc20-resultscalculatedsomewhereabove//result1=20//result2=21co

c++ - unsigned long vs size_t 导致函数重载失败

我定义了一个函数:voidmyfunc(size_tparam1,size_tparam2){...}它工作正常。但是当我尝试重载这个函数时voidmyfunc(unsignedlongparam1,unsignedlongparam2){...}编译失败,提示如下:错误:无法重载myfunc(unsignedlongparam1,unsignedlongparam2)。如何在不将输入参数静态转换为size_t的情况下解决这个问题?谢谢! 最佳答案 听起来size_t和unsignedlong在您的系统上是同一类型;编译器提示你有两

C++ std::atomic union

如何使用std::atomic将union设置为原子union?还是我必须声明union的成员是原子的?typedefunion{intinteger;floatflt;doubledbl;int*intArray;float*floatArray;unsignedchar*byteArray;}ValueUnion;classFooClass{public:std::atomicvalue;};访问union报错:foo->value.floatArray=NULL;error:nomembernamed'floatArray'in'std::__1::atomic'foo->val

c++ - 使用非固定整数(int、long)而不是固定大小的整数(int64_t、int32_t)有什么好处吗?

也许是性能?我觉得使用非固定整数只会让程序更复杂,并且在移植到另一个架构时更容易失败。 最佳答案 std::intN_t提供onlyiftheimplementationcandirectlysupportthem.因此,使用它们的移植代码可能会失败。我更喜欢std::intfastN_t用于一般用途,因为它们的限制较少,应该和int一样快或更快.此外,大多数C++代码使用int无处不在,所以你可能会在通过std::int32_t时遇到晋升怪事进入接受int的函数,特别是如果sizeof(int)只有16位。

使用 std::atomic 的 C++11 无锁队列(多作者,单消费者)

我使用C++11中的新std::atomic生成了无锁(lockfree)队列的简单实现。我在这里看不到我做错了什么。#includetemplateclasslockless_queue{public:templatestructnode{node(constDataType&data):data(data),next(nullptr){}DataTypedata;node*next;};lockless_queue():head_(nullptr){}voidproduce(constT&data){node*new_node=newnode(data);//putthecurre

c++ - 自定义文字适用于 long double 但不适用于 double,并且适用于按值传递但不按引用传递

我正在试验C++自定义文字。当我将类型从longdouble类型更改为double或尝试通过引用传递时,我发现下面的简单函数停止工作很奇怪。起初我认为它与constexpr的使用有关,但事实似乎并非如此,因为如果它不在operator""上,这两种方法都可以正常工作,并且从operator""中删除constexpr不会删除错误。这些是语言设计中经过深思熟虑的决定,还是我的编译器(gcc4.8.2)无法处理的细微差别?//Conversionfunction,worksfinewithbothlongdoubleand//double,andwithorwithoutpassbyref

c++ - 赋值是否等同于 std::atomic<bool> 的加载/存储

我看到这可能在问题MustIcallatomicload/storeexplicitly?中得到了回答.因此,为了清楚起见,我将简明扼要地重申我的问题,希望future的读者能明白这一点。是std::atomicb(false);boolx=b;与相同std::atomicb(false);boolx=b.load();和std::atomicb(false);b=true;与相同std::atomicb(false);b.store(true);如果确实如此,那么:为什么有两个选项?明显的好处是什么?在处理原子时,更喜欢更冗长的load()/store()而不是可能令人困惑的赋值(=

c++ - 为什么 std::atomic_thread_fence 有 "C"链接?

我猜不出为什么这个函数需要“C”而不是“C++”链接。 最佳答案 由LWGissue1479添加这是针对C++11的最后一分钟评论。此更改的基本原理是C语言兼容性(C11线程库在stdatomic.h中具有同名函数atomic_thread_fence)。据我所知,C和C++原子库可以共存一直是一个计划:其他兼容性示例是std::atomic的C兼容类型别名,例如atomic_int和C兼容性宏ATOMIC_VAR_INIT 关于c++-为什么std::atomic_thread_fen

c++ - 我使用 long double 的方式有问题吗?

我最近对学习C++编程产生了兴趣,因为我想更深入地了解计算机的工作方式和处理指令的方式。我想我会尝试数据类型,但我真的不明白我的输出发生了什么......#include#includeusingnamespacestd;intmain(){floatfValue=123.456789;cout我期望的输出是这样的:123.45678710937500000000Sizeoffloat:4123.45678900000000000000Sizeofdouble:8123.45678900000000000000Sizeoflongdouble:16这是我的实际输出:123.456787

c++ - 将 long long 与 0 进行比较

longlongllIdx=foo();if(llIdx>0LL)//CanIuse0here?...如果我在上面的代码中使用0而不是0LL,会有什么问题吗?什么时候我应该更喜欢0LL而不是0? 最佳答案 是的,你可以在这里使用普通的0。编译器会查看>的每个参数的类型并提升较小的参数,使它们具有相同的大小。因此llIdx>0和llIdx>0LL是等价的。 关于c++-将longlong与0进行比较,我们在StackOverflow上找到一个类似的问题: htt