草庐IT

objc_setProperty_atomic_copy

全部标签

C++ 递增 std::atomic_int 如果非零

我正在为引用计数器(如this)使用std::atomic实现指针/弱指针机制。为了将弱指针转换为强指针,我需要以原子方式进行检查强引用计数器是否非零如果是,增加它了解是否发生了变化。有没有办法使用std::atomic_int来做到这一点?我认为必须使用compare_exchange之一,但我想不通。 最佳答案 给定定义std::atomicref_count;intprevious=ref_count.load();for(;;){if(previous==0)break;if(ref_count.compare_exchan

c++ - 未找到符号,应在平面命名空间 ObjC++ 中

我可能遇到了一个简单的问题,但在编译期间没有信息性错误或警告来提醒我出了什么问题。我有一个Objective-C++应用程序,其中包含一个C++主文件和ObjC头文件。构建良好,但运行时,出现以下错误消息:DyldErrorMessage:Symbolnotfound:_OBJC_CLASS_$_AppControllerReferencedfrom:/Users/slate/Documents/osirixplugins/eqOsirix/build/Development/rcOsirix.app/Contents/MacOS/rcOsirixExpectedin:flatname

C++ 11 未定义对 `__atomic_store_16' 的引用

这个问题在这里已经有了答案:is_lock_freenotdefinedinstd::atomicingcc4.7.2?(1个回答)关闭8年前。以下代码链接失败:#includestructA{unsignedlonga;unsignedlongb;};structB{voidset(Atmp){_a.store(tmp);}std::atomic_a;};intmain(){Bb;b.set(A());return0;}出现以下错误:/tmp/cc8gyaZM.o:Infunction`std::atomic::store(A,std::memory_order)':dryn.cpp

c++ - 为什么在通知 condition_variable 之前需要获取锁来修改共享的 "atomic"变量

这个问题在这里已经有了答案:Whyistherenowaitfunctionforcondition_variablewhichdoesnotrelockthemutex(1个回答)关闭7个月前。根据cppreference.com:Thethreadthatintendstomodifythevariablehastoacquireastd::mutex(typicallyviastd::lock_guard)performthemodificationwhilethelockisheldexecutenotify_oneornotify_allonthestd::condition

c++ - 在派生类中使用基类 Copy CTOR

我知道有很多关于这个主题的帖子,但我找不到任何帖子来完全回答我的问题。假设我有一个基类和一个派生类,我为它实现了一个CCtor和一个赋值运算符,如下所示:classBase{char*name;....Base(constBase&other):name(nullptr){*this=other}voidoperator=(constBase&other){...Deepcopyofname}}classDerived:publicBase{....Derived(constDerived&other){*this=other;}voidoperator=(constDerived&o

C++ 为什么atomic_load的参数类型是指针而不是引用?

我同意Whentousereferencesvs.pointers中的答案.但是,我想知道为什么C++将atomic_load定义为templateTatomic_load(conststd::atomic*obj)noexcept;^代替templateTatomic_load(conststd::atomic&obj)noexcept;^谁能帮帮我? 最佳答案 我们拥有这些免费函数模板的原因是与C11的源代码兼容性:#ifdef__cplusplus#include#define_Atomic(X)std::atomic#els

c++ - 将 std::condition_variable 与 atomic<bool> 一起使用

有几个关于SO处理原子的问题,以及其他处理std::condition_variable的问题。但是我的问题是我下面的用法是否正确?三个线程,一个ctrl线程在取消暂停其他两个线程之前做准备工作。当工作线程(发送者/接收者)处于紧密的发送/接收循环中时,ctrl线程还能够暂停它们。使用atomic的想法是在未设置暂停bool值的情况下使紧密循环更快。classSomeClass{public://...//Disregardthatdataispublic...std::condition_variablecv;//UDPthreadswillwaitonthiscvuntilallo

c++ - 关于 Copy-On-Write 和 shared_ptr 的困惑

我已经在网上搜索并通读了有关shared_ptr的Boost文档。SO上有一个响应,说写时复制(COW)的shared_ptr很糟糕,TR!已将其从字符串库中删除。大多数关于SO的建议都说使用shared_ptr而不是常规指针。该文档还讨论了使用std::unique()来制作COW指针,但我还没有找到任何示例。谈论的是拥有一个为您执行COW的智能指针,还是让您的对象对克隆对象使用新的shared_ptr然后修改克隆对象?示例:食谱和配料structNutrients;structIngredient{Ingredient(conststd::string&new_title=std:

C++为什么vector初始化会调用copy constructor

当你用下面的方式初始化一个vector时:std::vectorMyVec(10);它调用默认构造函数一次,然后再调用复制构造函数10次。所以,如果我没理解错的话,vector中的对象都是拷贝构造函数生成的。有人可以解释调用复制构造函数而不是默认构造函数的原因吗?或者甚至只是在没有对象的情况下分配内存? 最佳答案 它将分配没有对象的内存,除非您指定初始大小为10,因此它必须创建10个对象。如果你想要存储10个对象而不实际创建它们,你可以这样做:std::vectorMyVec;MyVec.reserve(10);如果你看一下你正在使

c++ - 如果已经被互斥锁保护,我是否需要使用 atomic<>

给定thispost中的代码,实现Semaphore仅使用atomic和mutex.我很好奇自count已经被updateMutex守护,是atomic有必要吗?structSemaphore{intsize;atomiccount;mutexupdateMutex;Semaphore(intn):size(n){count.store(0);}voidaquire(){while(1){while(count>=size){}updateMutex.lock();if(count>=size){updateMutex.unlock();continue;}++count;update