草庐IT

atomic_release

全部标签

使用 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++ - 如何在 Release模式下调试?

我必须调试一个c++项目,但由于一个依赖项无法在Debug模式下编译,并且到目前为止我还无法解决该问题,我想尝试在Release模式下调试该项目。目前应用程序由于空指针而崩溃,但我没有导致错误的代码。由于在Release模式下显然忽略了断点,我想知道找到错误的最佳方法是什么。 最佳答案 在VS中,右键单击您的项目,选择“属性”。单击C/C++节点。将调试信息格式设置为C7兼容(/Z7)或程序数据库(/Zi)。展开链接器并单击常规节点。将启用增量链接设置为否(/INCREMENTAL:NO)。选择调试节点。将生成调试信息设置为是(/D

c++ - 如何在 Release模式下调试?

我必须调试一个c++项目,但由于一个依赖项无法在Debug模式下编译,并且到目前为止我还无法解决该问题,我想尝试在Release模式下调试该项目。目前应用程序由于空指针而崩溃,但我没有导致错误的代码。由于在Release模式下显然忽略了断点,我想知道找到错误的最佳方法是什么。 最佳答案 在VS中,右键单击您的项目,选择“属性”。单击C/C++节点。将调试信息格式设置为C7兼容(/Z7)或程序数据库(/Zi)。展开链接器并单击常规节点。将启用增量链接设置为否(/INCREMENTAL:NO)。选择调试节点。将生成调试信息设置为是(/D

c++ - 链接器错误 LNK2038 : mismatch detected in Release mode

我正在尝试将我的一个小应用程序从WinXP和VS2005移植到Win7和VS2010。应用程序在Debug模式下编译和运行顺利,但是在Release模式下我收到以下错误:pcrecpp.lib(pcrecpp.obj):errorLNK2038:mismatchdetectedfor'_ITERATOR_DEBUG_LEVEL':value'0'doesn'tmatchvalue'2'inLoginDlg.obj我应该从哪里开始检查? 最佳答案 您的应用正在Release模式下编译,但您链接的是PCRE的调试版本,该版本设置了/MT

c++ - 链接器错误 LNK2038 : mismatch detected in Release mode

我正在尝试将我的一个小应用程序从WinXP和VS2005移植到Win7和VS2010。应用程序在Debug模式下编译和运行顺利,但是在Release模式下我收到以下错误:pcrecpp.lib(pcrecpp.obj):errorLNK2038:mismatchdetectedfor'_ITERATOR_DEBUG_LEVEL':value'0'doesn'tmatchvalue'2'inLoginDlg.obj我应该从哪里开始检查? 最佳答案 您的应用正在Release模式下编译,但您链接的是PCRE的调试版本,该版本设置了/MT

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的模板参数并让它正常工作。但是,以下代

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的模板参数并让它正常工作。但是,以下代

c++ - 标准的 atomic bool 和 atomic flag 之间的区别

我不知道std::atomic变量,但知道std::mutex(很奇怪!)由标准提供;但是有一件事引起了我的注意:标准提供了两种看似相同(对我而言)的原子类型,如下所列:std::atomicstd::atomic_flagstd::atomic_flag包含以下解释:std::atomic_flagisanatomicbooleantype.Unlikeallspecializationsofstd::atomic,itisguaranteedtobelock-free.Unlikestd::atomic,std::atomic_flagdoesnotprovideloadorsto