gpt4 book ai didi

c++ - "Nested"scoped_lock

转载 作者:可可西里 更新时间:2023-11-01 18:16:27 28 4
gpt4 key购买 nike

我缩短的简化类如下所示:

class A
{
public:
// ...
methodA();
methodB();

protected:
mutable boost::mutex m_mutex;
sometype* m_myVar;
}

A::methodA( int someParam )
{
boost::mutex::scoped_lock myLock(m_mutex);
m_myVar->doSomethingElse();
}

A::methodB( int someParam )
{
boost::mutex::scoped_lock myLock(m_mutex);
m_myVar->doSomething();
this->methodA(someParam);
}

我想同步访问m_myVar。调用A::methodB()时,线程两次遇到同一个互斥量的锁,明显阻塞在A::methodA()的第一行/p>

有没有办法让scoped_lock再次通过时不阻塞同一个线程

当然,我可以调用 m_mutex.unlock()。但这也会释放等待锁的其他线程 - 这绝对不是我想要的。

有什么想法吗?

最好的问候托拜厄斯

最佳答案

这就是 boost::recursive_mutex 因为它允许同一个线程获得锁而不会多次死锁。使用它代替 boost::mutex

关于c++ - "Nested"scoped_lock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7865413/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com