草庐IT

shared_mutex

全部标签

c++ - 缺少 shared_ptr 和 weak_ptr 之间的相等性

虽然我明白为什么shared_ptr和unique_ptr没有operator==,但我想知道为什么没有shared_ptr和weak_ptr。特别是因为您可以通过对shared_ptr的引用创建一个weak_ptr。我假设在99%的时间里您都需要lhs.get()==rhs.get()。我现在会继续将其引入我的代码,除非有人能给我一个很好的理由,为什么不应该做这样的事情。 最佳答案 weak_ptr没有get()方法,因为您需要在访问底层指针之前显式锁定weak_ptr。明确这一点是一个深思熟虑的设计决定。如果转换是隐式的,那么很

c++ - 为什么锁定 std::mutex 不会阻塞线程

我写了下面的代码来测试我对std::mutex的理解intmain(){mutexm;m.lock();m.lock();//expecttoblockthethread}然后我得到一个system_error:deviceorresourcebusy。第二个m.lock()不是应该阻塞线程吗? 最佳答案 来自std::mutex:Acallingthreadmustnotownthemutexpriortocallinglockortry_lock.来自std::mutex::lock:Iflockiscalledbyathrea

具有 shared_ptr 成员的 C++ 复制构造函数

来自cplusplus.com:Rarelyyouwillcomeacrossaclassthatdoesnotcontainrawpointersyetthedefaultcopyconstructorisnotsufficient.Anexampleofthisiswhenyouhaveareference-countedobject.boost::shared_ptrisexample.有人可以详细说明一下吗?如果我们有一个包含boost::shared_ptr的类,当该类被复制构造时,不会得到复制构造-因此shared_ptr构造函数不会执行正确的事情并增加引用计数?例如,以下

c++ - std::enable_shared_from_this:是否允许在析构函数中调用 shared_from_this()?

#include#includestructA:publicstd::enable_shared_from_this{~A(){autothis_ptr=shared_from_this();//std::bad_weak_ptrexceptionhere.std::cout();a.reset();return0;}我在调用shared_from_this()时遇到std::bad_weak_ptr异常。是设计使然吗?是的,这可能很危险,因为在析构函数返回后无法使用此指针,但我看不出为什么在技术上不可能在这里获取指针的原因,因为共享指针对象显然仍然存在并且可以用过的。除了编写我自己的

c++ - 为什么 std::mutex 比 std::atomic 快?

我想在多线程模式下将对象放入std::vector中。所以我决定比较两种方法:一种使用std::atomic,另一种使用std::mutex。我看到第二种方法比第一种方法更快。为什么?我使用GCC4.8.1,在我的机器(8线程)上,我看到第一个解决方案需要391502微秒,第二个解决方案需要175689微秒。#include#include#include#include#include#includeintmain(intargc,char*argv[]){constsize_tsize=1000000;std::vectorfirst_result(size);std::vecto

c++ - 使用(和导出)boost::shared_ptr<T> 时出现错误 C2562

各位程序员好,我正在创建一个C++DLL库,我在其中使用了boost(1.55)的shared_ptr。然而,当我使用VisualStudio2013编译项目时,出现了一堆错误C2562:Error1errorC2562:'boost::shared_ptr::operator[]':'void'functionreturningavaluef:\developer\cplus\lib\boost_1_55_0\boost\smart_ptr\shared_ptr.hpp6631MEngineError2errorC2562:'boost::shared_ptr::operator[]

c++ - 如何将 boost::shared_ptr 作为指向 Windows 线程函数的指针传递?

如何将boost::shared_ptr作为指向Windows线程函数的指针传递?假设以下代码:test::start(){...._beginthreadex(NULL,0,&test::threadRun,&shared_from_this(),0,&threadID);......}/*thisisastaticfunction*/UINT__stdcalltest::threadRun(LPVOIDlpParam){shared_ptrk=*static_cast*>(lpParam);...}我认为这段代码不正确,你的想法是什么?我该怎么做?编辑:我通过boost::weak

c++ - Windows 的 Boost Mutex 实现

据我所知,在旧版本的Boostboost::mutex中,Windows的实现是使用临界区完成的。但是在最新版本的Boost1.51中,我发现现在互斥锁的实现是基于事件的。有人知道这种变化背后的原因是什么吗?是因为性能原因而完成的吗?关键部分会被弃用吗? 最佳答案 通过使用boost我们总是有最好的方法而不改变,这不是很好吗?在boost的新版本中,boost::mutex被实现为一个自旋锁,但在Windows事件的帮助下避免了繁忙的等待,并且该事件只会在需要时创建,因此它的重量非常轻,性能非常高,还可以让boost使用这个轻量级的

【C++】C++11——智能指针、内存泄漏、智能指针的使用和原理、RAII、auto_ptr、unique_ptr、shared_ptr、weak_ptr

文章目录C++117.智能指针7.1内存泄漏7.2智能指针的概念7.3智能指针的使用7.3.1auto_ptr7.3.2unique_ptr7.3.3shared_ptr7.3.4weak_ptrC++117.智能指针7.1内存泄漏  什么是内存泄漏:  内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。  内存泄漏通常由于程序在设计上的缺陷或错误,例如动态分配内存后,未在合适的时间或无法正确释放该段内存,而导致的。内存泄漏通常需要程序员通过分析程序源代码

c# - Windows 平台上的 .NET Mutex : What happens to them after I'm done?

我有一个简单的.NET程序,它检查是否已启动另一个实例:Mutexmutex=newMutex(false,"MyMutexName");if(!mutex.WaitOne(1))return;try{//dostuff}catch{//exceptions}finally{mutex.ReleaseMutex();}我的问题是,如果您在程序结束时忘记释放互斥量,究竟会发生什么情况?它在某些Windows控制面板组件中可见吗?它住在哪里? 最佳答案 它是一个已命名的互斥体,因此它是可见的并且可以在其他进程中打开。Windows在句柄