jjzjj

stdatomic

全部标签

c++ - 错误 C2280 : attempting to reference a deleted function (atomic<int>)

我有一个classA带有成员变量_atomicVar类型std::atomic.#includeclassA{public:A();~A();private:std::atomic_atomicVar;};如果我构建项目,我会收到以下错误:errorC2280:'std::atomic::atomic(conststd::atomic&)':attemptingtoreferenceadeletedfunction我主要是一名C#开发人员,所以我还不了解C++的每个细节(还)。我不知道我在哪里使用atomic的复制代码.我还尝试初始化_atomicVar:std::atomic_ato

c++ - iOS 构建中的非法操作码

以下代码(从大型项目中最小化)在使用XCode7.3.1、Boost1.61foriOS构建时导致EXC_BAD_INSTRUCTION崩溃:main.mm:#include"stdio.h"#include"boost/lockfree/queue.hpp"intmain(intargc,char*argv[]){printf("Test1in\n");boost::lockfree::queueq(100);printf("Test1out\n");return0;}堆栈跟踪似乎告诉我,问题出在C++原子操作上:#00x0000000100047a78instd::__1::__a

c++ - 为什么 Visual C++ 2015 允许 std::atomic 赋值?

几天前,我写了如下内容:structA{std::atomic_boolb=false;};使用VC++2015编译器在VisualStudio2015Update3中编译,没有弹出任何错误。现在我在Ubuntu上用GCC(5.4.0)重新编译了同样的东西并得到了错误:useofdeletedfunction'std::atomic::atomic(conststd::atomic&)我在ideone上遇到了同样的错误,设置为C++14(不确定它使用的是哪个编译器版本)。当然,将代码更改为以下内容可以解决gcc的问题:structA{std::atomic_boolb{false};}

c++ 11 std::atomic_flag,我使用正确吗?

我有一个简单的bool值,需要以线程安全的方式进行测试和设置。如果一个线程已经在工作,我希望第二个线程退出。如果我明白std::atomic_flag正确,这应该可以正常工作。但是,我不确定我是否正确理解了std::atomic_flag:)我似乎无法在网上找到很多简单的示例,除了这个自旋锁示例://myclass.cpp#usingnamespace//anonymousnamespace{std::atomic_flag_my_flag=ATOMIC_FLAG_INIT;}//nsmyclass::do_something(){if(!::_my_flag.test_and_set

C++ 标准 : can relaxed atomic stores be lifted above a mutex lock?

标准中是否有任何措辞保证对原子的宽松存储不会被提升到互斥锁的锁定之上?如果没有,是否有任何措辞明确表示编译器或CPU这样做是符合犹太教规的?例如,采用以下程序(它可能使用acq/rel来处理foo_has_been_set并避免锁定,和/或使foo本身原子化。它是这样写的来说明这个问题。)std::mutexmu;intfoo=0;//Guardedbymustd::atomicfoo_has_been_set{false};voidSetFoo(){mu.lock();foo=1;foo_has_been_set.store(true,std::memory_order_relaxe

C++ 标准 : can relaxed atomic stores be lifted above a mutex lock?

标准中是否有任何措辞保证对原子的宽松存储不会被提升到互斥锁的锁定之上?如果没有,是否有任何措辞明确表示编译器或CPU这样做是符合犹太教规的?例如,采用以下程序(它可能使用acq/rel来处理foo_has_been_set并避免锁定,和/或使foo本身原子化。它是这样写的来说明这个问题。)std::mutexmu;intfoo=0;//Guardedbymustd::atomicfoo_has_been_set{false};voidSetFoo(){mu.lock();foo=1;foo_has_been_set.store(true,std::memory_order_relaxe

c++ - 在没有互斥锁的 C++11 中实现共享整数计数器的最简单方法 :

假设我们有以下代码来计算某事发生的次数:inti=0;voidf(){//dostuff...if(something_happens)++i;}intmain(){std::vectorthreads;for(intj=0;j就目前而言,i上有一个明确的竞争条件。使用C++11,(1)消除这种竞争条件的最简单方法是什么,以及(2)最快的方法是什么?最好不使用互斥锁。谢谢。更新:使用注释来使用原子,我得到了一个在英特尔编译器版本13下编译的工作程序:#include#include#include#include#includestd::atomici=0;voidf(intj){if

c++ - 在没有互斥锁的 C++11 中实现共享整数计数器的最简单方法 :

假设我们有以下代码来计算某事发生的次数:inti=0;voidf(){//dostuff...if(something_happens)++i;}intmain(){std::vectorthreads;for(intj=0;j就目前而言,i上有一个明确的竞争条件。使用C++11,(1)消除这种竞争条件的最简单方法是什么,以及(2)最快的方法是什么?最好不使用互斥锁。谢谢。更新:使用注释来使用原子,我得到了一个在英特尔编译器版本13下编译的工作程序:#include#include#include#include#includestd::atomici=0;voidf(intj){if

c++ - 用于无锁单链表的原子 shared_ptr

我想知道是否可以为任何“常见”架构(如x64或ARMv7/ARMv8)创建无锁、线程安全的共享指针。关于lock-freeprogrammingatcppcon2014的谈话,HerbSutter提出了无锁单链表的(部分)实现。实现看起来很简单,但它依赖于原子shared_ptr标准库中尚不存在或使用专用std::atomic...的实现功能。这一点尤其重要,因为单个push/pop调用可能会调用多个原子加载/存储和compare_exchange操作。我看到的问题(而且我认为谈话中的一些问题朝着相同的方向发展)是,要使这成为一个真正的无锁数据结构,这些原子操作本身必须是无锁的。我不知

c++ - 用于无锁单链表的原子 shared_ptr

我想知道是否可以为任何“常见”架构(如x64或ARMv7/ARMv8)创建无锁、线程安全的共享指针。关于lock-freeprogrammingatcppcon2014的谈话,HerbSutter提出了无锁单链表的(部分)实现。实现看起来很简单,但它依赖于原子shared_ptr标准库中尚不存在或使用专用std::atomic...的实现功能。这一点尤其重要,因为单个push/pop调用可能会调用多个原子加载/存储和compare_exchange操作。我看到的问题(而且我认为谈话中的一些问题朝着相同的方向发展)是,要使这成为一个真正的无锁数据结构,这些原子操作本身必须是无锁的。我不知