草庐IT

atomic_bool

全部标签

c++ - 实现 atomic *= 的不同方式

通过一本书学习,它解释了如何实现更复杂的操作,如operator*对于std::atomic.实现使用compare_exchange_weak我想我明白这是怎么回事了。现在,我自己实现了一些东西,看看吧。#include#include#include/*template::value>>std::atomic&operator*=(std::atomic&t1,Tt2){Texpected=t1.load();while(!t1.compare_exchange_weak(expected,expected*t2)){}returnt1;}*/template::value>>st

c++ - 将 C++0x 的 atomic<int> 作为非原子访问

我的程序中有一个atomic类型的原子变量.在某些地方,我不需要以原子方式访问其中的值,因为我只检查它是否为0。换句话说,在那些情况下,我想避免在有原子访问时发生的总线锁定等开销。如何以非原子方式访问原子变量。使用(int)对其进行类型转换是否足够,如下所示?如果不是,我想我该怎么做?atomicatm;intx;........x=(int)atm;//Wouldthisbeanon-atomicaccess,nobuslockingetall? 最佳答案 您无法摆脱原子性属性。但是您可以通过放宽内存排序保证来减少使用原子变量所涉

c++ - boost::atomic 的 header 是什么

我想使用boost::atomic但要包含什么header?没有boost/atomic.hpp 最佳答案 Boost.Atomic目前还不是boost的官方部分。如果您仍想使用它,则需要从here获取它。.或者你可以试试Boost.Interprocess对于原子操作,依赖编译器相关扩展,如gccs原子操作(__sync_val_compare_and_swap等),或者,如果c++11是一个选项,请使用std::atomic,这几乎与boost::atomic相同IIRC.编辑:一如既往,这些事情发生了变化:Boost.Atom

c++ - 使用 const bool 引用进行后台任务取消跟踪? (C++)

我有一个桌面应用程序,当用户请求时,某些计算在后台线程中运行。有一个取消按钮。我知道向后台任务发出取消信号的“安全”或“正确”方式(使用Qt信号/槽连接、后台任务轮询的互斥体包装bool值等)。然而,在我看来最简单的事情是在我的主线程类中有一个boolcancelled,它在按下Cancel按钮时同步设置,并传递一个constbool&cancelled到它轮询的后台线程。这种方法是否有任何现实的方法会适得其反? 最佳答案 线程可以在不同的处理器上运行,每个处理器都有自己的缓存。如果bool值是原子的,你可以这样做。否则,您可能会面

c++ - Fedora 22 - 编译 - __atomic_is_lock_free

我尝试在Fedora22上编译一个软件(SuperCollider),但我遇到了一个问题:libsupernova.a(server.cpp.o):Infunction`std::atomic::is_lock_free()const':/usr/include/c++/5.1.1/atomic:212:undefinedreferenceto`__atomic_is_lock_free'collect2:error:ldreturned1exitstatusserver/supernova/CMakeFiles/supernova.dir/build.make:96:recipefo

c++ - Bool 方法返回错误值

我为链表哈希表创建了一个boolcontains(string)方法,它检查一个值是否在哈希中。我使用辅助函数进行递归,但是当辅助函数返回false时,boolcontains(string)仍然返回true。我通过调试器运行它,我可以清楚地看到它返回false,我不确定为什么。这是当前正在搜索的节点:"laccoliths"->"morbiferous"->"oculi"->"unsabbarded"我要搜索的值是"typung"。代码如下:boolcontains_h(stringx,node*p)//helpermethod{if(p==NULL)returnfalse;else

c++ - 有没有标准的方法来替换 C 风格的 bool 数组?

在这段代码中voidlegacyFunction(intlength,bool*bitset){//stuff,lotsofstuff}intmain(){intsomenumber=6;//somenumberissettosomevalueherebool*isBitXSet=newbool[somenumber];//initialisationofisBitXSet.legacyFunction(somenumber,isBitXSet);delete[]isBitXSet;return0;}我想替换bool*isBitXSet=newbool[somenumber];通过类似

c++ - 为什么 volatile 不是 sig_atomic_t 的一部分

在我的平台(X86、Fedora、gcc9.1.1)上,sig_atomic_t类型定义为普通的int。在C++标准中,sig_atomic_t始终与volatile限定符一起使用。我明白为什么需要volatile,但为什么它不是类型的一部分呢?类似于:usingsig_atomic_t=volatileint; 最佳答案 这是从C继承的。C定义,同时允许sig_atomic_t要volatile合格,不需要它。我看过的标准文档(N1570)中使用的所有示例都以volatilesig_atomic_t的形式给出。.现在使用std:a

c++ - 在 set<int> 与 vector<bool> 与 vector<boolean_t> 之间进行选择以用作位图(位集/位数组)

给定一系列索引(标识符),我想将每个索引映射到一个bool值,即://interfacepseudocodeinterfacebitmap{boolidentifier_is_set(unsignedintid_idx)const;voidset_identifier(unsignedintid_idx,boolval)const;};这样我就可以设置和查询每个ID(索引)是否已设置,您更喜欢用什么来实现它?我认为这叫做位数组或位图或位集,如果我错了请纠正我。假设最大标识符是预先确定的并且不大于1e6(1m),可能更小(10k-100k)。(这意味着sizeof(int)*maximu

c++ - clang 不知道 std::atomic_bool,但 XCode 知道

我正在尝试编译声明std::atomic_bool类型变量的C++11代码。这是在带有clang的MacOS10.8.2上:clang--versionAppleclangversion4.1(tags/Apple/clang-421.11.66)(basedonLLVM3.1svn)Target:x86_64-apple-darwin12.2.0Threadmodel:posixclang提示std::atomic_bool:clang++-c-stdlib=libc++-msse4-std=c++11-Wno-unused-parameter-I.-oquery.oquery.cp