草庐IT

objc_setProperty_atomic_copy

全部标签

C++ std::atomic 与 Boost atomic

在我的应用程序中,我有一个int和一个bool变量,它们由多个线程访问(多次写入/读取)。目前,我正在使用两个互斥锁,一个用于int,一个用于bool来保护这些变量。我听说过使用原子变量和运算符来编写无锁多线程程序。我的问题是原子变量和运算符的定义是什么?std::atomic和boost/atomic.hpp?哪个更标准或更流行?这些库是否依赖于平台?我正在使用gnugcc4.6目前是Linux,但理想情况下它应该是跨平台的。我听说“原子”的定义实际上也取决于硬件。谁能解释一下?在多个线程之间共享bool变量的最佳方式是什么?我不想使用“volatile”关键字。这些代码是线程安全的

c++ - std::uninitialized_copy 和 std::copy 之间的区别?

std::uninitialized_copy和std::copy有什么区别,什么时候用哪个? 最佳答案 假设您通过malloc在堆上分配了一些内存并有一个指针T*p指向它。您最终会得到未初始化的存储,因为所有malloc所做的只是将您要求的大小的位置标记为已分配(另一方面,new实际上构造了对象,从而使分配的区域初始化存储)。由于从p开始的内存位置没有T类型的有效对象坐在那里,你不能这样做Ta;*p=a;因为在p处没有T类型的对象来调用赋值运算符。相反,您将使用placementnew在位置p处构造一个类型为T的对象。:Ta;ne

c++ - std::uninitialized_copy 和 std::copy 之间的区别?

std::uninitialized_copy和std::copy有什么区别,什么时候用哪个? 最佳答案 假设您通过malloc在堆上分配了一些内存并有一个指针T*p指向它。您最终会得到未初始化的存储,因为所有malloc所做的只是将您要求的大小的位置标记为已分配(另一方面,new实际上构造了对象,从而使分配的区域初始化存储)。由于从p开始的内存位置没有T类型的有效对象坐在那里,你不能这样做Ta;*p=a;因为在p处没有T类型的对象来调用赋值运算符。相反,您将使用placementnew在位置p处构造一个类型为T的对象。:Ta;ne

使用 header `<atomic>` 实现自旋锁的 C++11

我实现了SpinLock类,如下structNode{intnumber;std::atomic_boollatch;voidadd(){lock();number++;unlock();}voidlock(){boolunlatched=false;while(!latch.compare_exchange_weak(unlatched,true,std::memory_order_acquire));}voidunlock(){latch.store(false,std::memory_order_release);}};我实现了上面的类并创建了两个线程,每个线程调用同一Node类

使用 header `<atomic>` 实现自旋锁的 C++11

我实现了SpinLock类,如下structNode{intnumber;std::atomic_boollatch;voidadd(){lock();number++;unlock();}voidlock(){boolunlatched=false;while(!latch.compare_exchange_weak(unlatched,true,std::memory_order_acquire));}voidunlock(){latch.store(false,std::memory_order_release);}};我实现了上面的类并创建了两个线程,每个线程调用同一Node类

c++ - 删除copy-ctor和copy-assignment - public、private还是protected?

为了使对象不可复制,我们可以显式删除其复制构造函数和复制赋值运算符。我的问题是:什么是正确的做法-在类(class)的public、private或protected部分?而且-这个选择有什么不同吗? 最佳答案 whatistherightplacetodoit-inthepublic,privateorprotectedsectionoftheclass?我会将它们放在public部分。这是因为删除构造函数或赋值运算符与将它们设为private/protected是正交的;当这些没有被删除时,它们默认是public的。在我看来,将

c++ - 删除copy-ctor和copy-assignment - public、private还是protected?

为了使对象不可复制,我们可以显式删除其复制构造函数和复制赋值运算符。我的问题是:什么是正确的做法-在类(class)的public、private或protected部分?而且-这个选择有什么不同吗? 最佳答案 whatistherightplacetodoit-inthepublic,privateorprotectedsectionoftheclass?我会将它们放在public部分。这是因为删除构造函数或赋值运算符与将它们设为private/protected是正交的;当这些没有被删除时,它们默认是public的。在我看来,将

c++ - 初始化 std::atomic_bool?

我想使用std::atomic_bool因为我想要一个应该被不同线程访问的bool值。它是一个static成员变量。问题是我想用false作为第一个状态来初始化它。通常我会这样做:std::atomic_boolWorld::mStopEvent=false;但问题似乎是它没有将false作为构造函数。那么我应该如何初始化这样一个变量呢?我正在使用VS2012。 最佳答案 这是knownissueinVisualStudio2012(knownasVC11),您应该对现有的Connect项目进行投票,以便Microsoft知道它会影

c++ - 初始化 std::atomic_bool?

我想使用std::atomic_bool因为我想要一个应该被不同线程访问的bool值。它是一个static成员变量。问题是我想用false作为第一个状态来初始化它。通常我会这样做:std::atomic_boolWorld::mStopEvent=false;但问题似乎是它没有将false作为构造函数。那么我应该如何初始化这样一个变量呢?我正在使用VS2012。 最佳答案 这是knownissueinVisualStudio2012(knownasVC11),您应该对现有的Connect项目进行投票,以便Microsoft知道它会影

c++ - std::atomic<std::string> 是否正常工作?

我正在阅读AnthonyWilliams的“C++ConcurrencyinAction”和第5章,其中讨论了新的多线程感知内存模型和原子操作,他说:Inordertousestd::atomicforsomeuser-definedUDT,thistypemusthaveatrivialcopyassignmentoperator.据我了解,这意味着我们可以使用std::atomic如果以下返回true:std::is_trivially_copyable::value按照这个逻辑,我们应该不能使用std::string作为std::atomic的模板参数并让它正常工作。但是,以下代