草庐IT

connectionList_mutex

全部标签

c++ - std::mutex 与 std::recursive_mutex 作为类成员

我看到有人讨厌recursive_mutex:http://www.zaval.org/resources/library/butenhof1.html但是当考虑如何实现一个线程安全的类(互斥保护)时,在我看来很难证明每个应该受互斥保护的方法都是互斥保护的,并且互斥最多被锁定一次。所以对于面向对象的设计,应该std::recursive_mutex是默认的,而std::mutex在一般情况下被认为是一种性能优化,除非它只用于一个地点(只保护一种资源)?为了清楚起见,我说的是一个私有(private)的非静态互斥体。所以每个类实例只有一个互斥体。在每个公共(public)方法的开头:{s

C++11 等价于 boost shared_mutex

boost::shared_mutex是否有C++11等效项。或者在C++11中处理多读/单写情况的另一种解决方案? 最佳答案 我尝试过但未能将shared_mutex导入C++11。它已被提议用于future的标准。建议是here.编辑:修订版(N3659)wasaccepted对于C++14。这是一个实现:http://howardhinnant.github.io/shared_mutexhttp://howardhinnant.github.io/shared_mutex.cpp

go - sync/mutex.go 中的 “_ = variable” 是什么意思

同步/mutex.go:func(m*Mutex)Unlock(){ifrace.Enabled{_=m.staterace.Release(unsafe.Pointer(m))}..._=m.state是什么意思?我知道var_interface=Object的意思是检查Object是否实现了接口(interface)。 最佳答案 从提交日志来看,原因是“_=m.state”确保m不为nil。commit5bb3a66a973ea87494b9197091e8c1f122080627Author:RémyOudomphengDat

linux - pthread_mutex_lock 是如何实现的

我只是想知道与线程之间的同步相关的功能是如何在Unix中实现的。例如,当我调用pthread_mutex_lock时会发生什么?有没有使用中的指针?对源代码的引用会很有帮助。 最佳答案 它既复杂又不同于Unix到Unix变体。例如,在Linux中,使用了一个名为Futex(FastUserspaceMutex的缩写)的系统。在该系统中,对用户空间中的互斥变量执行原子增量和测试操作。如果操作的结果表明没有对锁的争用,那么对pthread_mutex_lock的调用就会返回而无需上下文切换到内核中,因此获取互斥锁的操作可以非常快。只有在

c++ - 如何在不使用 <mutex> 的情况下在 C++11 中实现多线程安全单例

现在C++11具有多线程,我想知道在不使用互斥体的情况下实现延迟初始化单例的正确方法是什么(出于性能原因)。我想出了这个,但是我不太擅长编写无锁代码,所以我正在寻找一些更好的解决方案。//ConsoleApplication1.cpp:Definestheentrypointfortheconsoleapplication.//#include#include#include#includeusingnamespacestd;classSingleton{public:Singleton(){}staticboolisInitialized(){return(flag==2);}sta

c++ - boost shared_mutex(多次读取/一次写入)的示例?

我有一个多线程应用程序,它必须经常读取一些数据,并且偶尔会更新这些数据。现在,互斥锁可以安全地访问该数据,但它很昂贵,因为我希望多个线程能够同时读取,并且仅在需要更新时将它们锁定(更新线程可以等待其他线程完成).我认为这是boost::shared_mutex应该做的,但我不清楚如何使用它,也没有找到一个明确的例子。有没有人有一个简单的例子可以用来入门? 最佳答案 1800INFORMATION或多或少是正确的,但我想更正一些问题。boost::shared_mutex_access;voidreader(){boost::shar

c++ - 如何使用 std::vector<std::mutex> 之类的东西?

我有大量但可能变化的对象同时写入。我想用互斥锁保护这种访问。为此,我认为我使用了std::vector,但这不起作用,因为std::mutex没有复制或移动构造函数,而std::vector::resize()需要。这个难题的推荐解决方案是什么?编辑:是否所有C++随机访问容器都需要复制或移动构造函数来重新调整大小?std::deque有帮助吗?再次编辑首先,感谢您的所有想法。我对避免静音和/或将它们移动到对象中的解决方案不感兴趣(我不提供细节/原因)。所以考虑到我想要一个可调整数量的互斥量(当没有互斥量被锁定时保证发生调整)的问题,那么似乎有几种解决方案。1我可以使用固定数量的mut

c++ - 如何使用 std::vector<std::mutex> 之类的东西?

我有大量但可能变化的对象同时写入。我想用互斥锁保护这种访问。为此,我认为我使用了std::vector,但这不起作用,因为std::mutex没有复制或移动构造函数,而std::vector::resize()需要。这个难题的推荐解决方案是什么?编辑:是否所有C++随机访问容器都需要复制或移动构造函数来重新调整大小?std::deque有帮助吗?再次编辑首先,感谢您的所有想法。我对避免静音和/或将它们移动到对象中的解决方案不感兴趣(我不提供细节/原因)。所以考虑到我想要一个可调整数量的互斥量(当没有互斥量被锁定时保证发生调整)的问题,那么似乎有几种解决方案。1我可以使用固定数量的mut

ruby-on-rails - 如何在增加预先加载的同时解决此错误? "ERROR ThreadError: Attempt to unlock a mutex which is locked by another thread"

我的Rails应用程序使用inherited_resourcesgem。我目前正在尝试加快它的速度,以便能够处理更大的数据集。因此,我继续(在Bulletgem的帮助下)在证明有用的地方使用预加载。在inherited_resources中它看起来像这样:defcollectionmy_widgets||=end_of_association_chain.includes(:association_one,:association_two,:association_three,:association_four)@widgets=caseparams[:filter]whennilth

c++ - std::mutex 会创建栅栏吗?

如果我锁定了一个std::mutex,我总是会得到一个内存栅栏吗?我不确定这是否暗示或强制您获得围栏。更新:根据RMF的评论找到此引用资料。Multithreadedprogrammingandmemoryvisibility 最佳答案 据我了解,这包括在:1.10多线程执行和数据竞争第5段:Thelibrarydefinesanumberofatomicoperations(Clause29)andoperationsonmutexes(Clause30)thatarespeciallyidentifiedassynchronizat