草庐IT

atomic-swap

全部标签

c++ - 带有 gcc 7.3 的 __atomic_fetch_or 的意外 x64 程序集

我正在尝试使用64位积分作为位图,并以原子方式获取/释放各个位的所有权。为此,我编写了以下无锁代码:#include#includestaticconstexprstd::uint64_tNO_INDEX=~std::uint64_t(0);classAtomicBitMap{public:staticconstexprstd::uint64_toccupied()noexcept{return~std::uint64_t(0);}std::uint64_tacquire()noexcept{while(true){automap=mData.load(std::memory_orde

c++ - 为 iPhone 应用程序解析 RSS/Atom 提要的最佳方法是什么?

所以我知道,就直接解析XML而言,有几个选项可用:NSXMLParser、TouchCode中的TouchXML等。这一切都很好,而且对我来说似乎工作得很好。这里真正的问题是RSS提要(以及Atom提要)有许多小的变化,因此支持Internet上所有可能的提要排列变得非常难以管理。我四处寻找可以为我处理所有这些低级细节的库,但结果却一无所获。既然可以链接到Objective-C中的外部C/C++库,我想知道是否有一个库最适合这项任务?一定有人已经创建了这样的东西,只是很难从Google的数千个结果中找到“正确”的选项。无论如何,在iPhone应用程序中解析RSS/Atom提要的最佳方法

c++ - 为 iPhone 应用程序解析 RSS/Atom 提要的最佳方法是什么?

所以我知道,就直接解析XML而言,有几个选项可用:NSXMLParser、TouchCode中的TouchXML等。这一切都很好,而且对我来说似乎工作得很好。这里真正的问题是RSS提要(以及Atom提要)有许多小的变化,因此支持Internet上所有可能的提要排列变得非常难以管理。我四处寻找可以为我处理所有这些低级细节的库,但结果却一无所获。既然可以链接到Objective-C中的外部C/C++库,我想知道是否有一个库最适合这项任务?一定有人已经创建了这样的东西,只是很难从Google的数千个结果中找到“正确”的选项。无论如何,在iPhone应用程序中解析RSS/Atom提要的最佳方法

c++ - 为什么 memory_order 作为 std::atomic 函数的运行时参数给出

std::atomic函数,例如store和load采用std::memory_order参数。参数可以在运行时确定,就像任何其他函数参数一样。但是,实际值可能会影响编译期间代码的优化。考虑以下几点:std::atomicai1,ai2;intvalue=whatever;voidfoo(){std::memory_ordermemOrd=getMemoryOrder();registerintv=value;//loadvaluefrommemoryai1.store(v,memOrd);//dependencyonv'svalueai2.store(1,memOrd);//node

c++ - 为什么 memory_order 作为 std::atomic 函数的运行时参数给出

std::atomic函数,例如store和load采用std::memory_order参数。参数可以在运行时确定,就像任何其他函数参数一样。但是,实际值可能会影响编译期间代码的优化。考虑以下几点:std::atomicai1,ai2;intvalue=whatever;voidfoo(){std::memory_ordermemOrd=getMemoryOrder();registerintv=value;//loadvaluefrommemoryai1.store(v,memOrd);//dependencyonv'svalueai2.store(1,memOrd);//node

c++ - swap() 会导致未定义的行为吗?

我试图从[C++11:utility.swap]中了解std::swap的条件。模板定义为templatevoidswap(T&,T&)(加上一些noexcept细节)并具有“交换存储在两个位置的值”的效果。以下程序是否定义明确?#includeintmain(){intm,n;std::swap(m,n);}如果我自己编写交换代码(即inttmp=m;m=n;n=tmp;),它将具有未定义的行为,因为它会尝试左值到右值的转换一个未初始化的对象。但是标准的std::swap函数似乎没有附加任何条件,也不能从规范中得出存在任何左值到右值和因此UB的规范。标准是否要求std::swap对未

c++ - swap() 会导致未定义的行为吗?

我试图从[C++11:utility.swap]中了解std::swap的条件。模板定义为templatevoidswap(T&,T&)(加上一些noexcept细节)并具有“交换存储在两个位置的值”的效果。以下程序是否定义明确?#includeintmain(){intm,n;std::swap(m,n);}如果我自己编写交换代码(即inttmp=m;m=n;n=tmp;),它将具有未定义的行为,因为它会尝试左值到右值的转换一个未初始化的对象。但是标准的std::swap函数似乎没有附加任何条件,也不能从规范中得出存在任何左值到右值和因此UB的规范。标准是否要求std::swap对未

c++ - 如何在具有 copy-and-swap 习语的赋值运算符中使用 noexcept?

移动赋值运算符通常应该声明为noexcept(即将类型存储在STL容器中)。但是copy-and-swap习惯用法允许在单个代码中定义复制和移动赋值运算符。在这种情况下如何处理noexcept说明符?复制构造可以抛出,但我怀疑它是否会违反noexcept说明符。//IsitcorrectconsideringthatTcopyconstructorcanthrow?T&operator=(Tother)noexcept; 最佳答案 由于拷贝是在调用的调用者的方面制作的,因此它不是您的函数所做的一部分。因此它不能由您的函数控制,因此您

c++ - 如何在具有 copy-and-swap 习语的赋值运算符中使用 noexcept?

移动赋值运算符通常应该声明为noexcept(即将类型存储在STL容器中)。但是copy-and-swap习惯用法允许在单个代码中定义复制和移动赋值运算符。在这种情况下如何处理noexcept说明符?复制构造可以抛出,但我怀疑它是否会违反noexcept说明符。//IsitcorrectconsideringthatTcopyconstructorcanthrow?T&operator=(Tother)noexcept; 最佳答案 由于拷贝是在调用的调用者的方面制作的,因此它不是您的函数所做的一部分。因此它不能由您的函数控制,因此您

c++ - 是否有必要使用 std::atomic 来表示线程已完成执行?

我想检查std::thread已完成执行。搜索stackoverflow我发现了以下question它解决了这个问题。接受的答案建议让工作线程在退出之前设置一个变量并让主线程检查这个变量。以下是此类解决方案的一个最小工作示例:#include#includevoidwork(bool*signal_finished){sleep(5);*signal_finished=true;}intmain(){boolthread_finished=false;std::threadworker(work,&thread_finished);while(!thread_finished){//d