草庐IT

atomic_bool

全部标签

c++ - c/c++ Linux 相当于 "bool DllMain()"- 但我需要将失败返回给 dlopen()

我正在将一个DLL从Windows移植到Linux(实际上是OSX)。我用了这个StackOverflowarticle做那个改变。即我已经将Windows“boolDllMain()”移植到Linux方式:__attribute__((constructor))voiddllLoad();__attribute__((destructor))voiddllUnload();...但两者都是void返回类型。我需要能够执行与Windows相同的操作,并在构造函数中不满足条件时返回FALSE,以便dlopen()失败并且.so不会加载。如何使调用dlopen()失败?

c++ - 函数 bool isnan( … ) 在 C++ 中的定点实现

我正在用C++进行定点实现,我正在尝试定义“非数字”并支持函数boolisnan(…)如果数字不是数字则返回true,否则返回false。有人能给我一些关于如何定义“非数字”并在我的定点数学实现中实现函数boolisnan(…)的想法吗。我读过有关C++Nan的资料,但我无法获得有关如何手动定义和创建函数nan()以在定点实现中使用它的任何来源或引用。有人可以告诉我如何进行或提供一些引用以进行吗?谢谢更新定点header#ifndef__fixed_point_header_h__#define__fixed_point_header_h__#include#include#endif

c++ - 为什么在成功将 bool 字符串值转换为 bool 值时,istringstream eof 标志没有变为真?

我正在学习如何使用istringstream将存储为字符串的值转换为native类型。当存储为字符串的数字成功转换为int或double时,istringstreameof()函数返回true。当存储为字符串的bool值成功转换为bool时,eof()返回false。造成差异的原因是什么?为什么当似乎没有其他字符需要处理时eof()不返回true?转换为bool值的代码:stringvalue="true";istringstreamconverter(value);boolconvertedValue;if(!(converter>>std::boolalpha>>converted

c++ - __sync_val_compare_and_swap 与 __sync_bool_compare_and_swap

我一直在思考这两个函数的返回值。__sync_bool_compare_and_swap函数的返回值似乎有明显的好处,即我可以用它来判断交换操作是否发生。但是,我看不到__sync_val_compare_and_swap的返回值的良好用途。首先,让我们有一个函数签名供引用(来自GCC文档减去varargs):type__sync_val_compare_and_swap(type*ptr,typeoldvaltypenewval);我看到的问题是__sync_val_compare_and_swap的返回值是*ptr的旧值。准确地说,这是在设置了适当的内存屏障后,此函数的实现所看到的

c++ - "#define bool bool"当我悬停 bool 时说 QtCreator - 我将其跟踪到 boost::asio

我注意到bool在QtCreator中以不同于其他类型的颜色突出显示:只有在包含某些header时才会发生这种情况,最终我将其追踪到.QtCreator的代码检查器似乎无法手动跟踪定义。我使用的boost版本是Boost1.59。这样做有什么目的吗?我真的不介意,但是为同一事物定义任何东西是相当奇怪的,而不是bool. 最佳答案 好吧,我搜索了Boost1.59代码,看看是否可以找到:#defineboolbool或#include但我最终没有找到它们,所以它可能在这些文件中,但很可能在其他地方。Isthereanypurposef

c++ - 如何正确增加 C++11 std::atomic?

我是多线程编程的新手,我发现了C++11中的std::atomic。所以,我试图弄清楚原子操作需要多少时间。我试过这段代码:usingnamespacestd;usingnamespacestd::chrono;constexprintNUM_THREADS=8;constexprintLIMIT=100000;atomicsum=0;voidfoo(intidx){while(true){if(sum.load()>=LIMIT){return;}sum.fetch_add(1);}}与主要:intmain(void){threadthreads[NUM_THREADS];autos

c++ - std::atomic 用于内置类型 - 非无锁与琐碎的析构函数?

查看std::atomic这是我阅读的默认专业:Thesespecializationshavestandardlayout,trivialdefaultconstructors,andtrivialdestructors.我还阅读了is_lock_free:Allatomictypesexceptforstd::atomic_flagmaybeimplementedusingmutexesorotherlockingoperations,ratherthanusingthelock-freeatomicCPUinstructions.Atomictypesarealsoallowed

c++ - std::atomic::compare_exchange 与两个 memory_order 参数一起使用的真实示例

您能否给出一个真实世界的例子,其中出于某种原因使用了std::atomic::compare_exchange的两个memory_order参数版本(因此一个memory_order参数版本是不够的)? 最佳答案 在许多情况下,compare_exchange上的第二个内存排序参数设置为memory_order_relaxed。在这些情况下,省略它通常并没有错,只是可能效率较低。这里是一个简单的无锁列表/堆栈示例,它需要compare_exchange_weak上的第二个不同的排序参数,以便避免数据竞争。调用push可以并发执行,但

c++ - 为什么 std atomic 将 5 插入堆栈

我想看看std::atomic是如何被翻译成汇编的。为此,我编写了以下代码,但有些地方我不明白。以下代码:intmain(void){std::atomica;a.fetch_add(0);return0;}由GCC编译为:1|pushrbp2|movrbp,rsp3|movDWORDPTR[rbp-4],04|movDWORDPTR[rbp-8],55|movedx,DWORDPTR[rbp-4]6|learax,[rbp-12]7|lockxaddDWORDPTR[rax],edx8|moveax,09|poprbp10|ret为什么GCC将“5”(第4行)压入堆栈?

c++ - bool 位字段与逻辑位掩码或位移 - C++

我有一系列需要很多bool字段的类,大约在4-10个之间。我不想为每个bool值使用一个字节。我一直在研究位域结构,例如:structBooleanBitFields{boolb1:1;boolb2:1;boolb3:1;boolb4:1;boolb5:1;boolb6:1;};但在做了一些研究后,我看到很多人说这会导致内存访问效率低下,不值得节省内存。我想知道这种情况的最佳方法是什么。我应该使用位字段,还是使用带位掩码的字符(and'sandors)存储8位?如果第二种解决方案是移位更好还是使用逻辑更好?如果有人可以评论他们会使用什么方法以及为什么它真的能帮助我决定我应该走哪条路。提