- 主题:经典死锁
除了这种交叉加锁,
void Foo()
{
std::lock_guard guard1{m_mutex1};
std::lock_guard guard2{m_mutex2};
...
}
void Bar()
{
std::lock_guard guard2{m_mutex2};
std::lock_guard guard1{m_mutex1};
...
}
看到好多这种死锁:
int ThreadProc() {
...
std::lock_guard guard{m_mutex};
...
}
void StopThread()
{
std::lock_guard guard{m_mutex};
if (m_thread != nullptr)
{
m_thread->join();
delete m_thread;
m_thread = nullptr;
}
}
--
FROM 114.241.228.*
你的意思是这么用的不是人吗?哈哈
【 在 ylh1969 的大作中提到: 】
: 没人这么用吧!
--
FROM 114.241.228.*
那只能说明您老用得少
1、std::scoped_lock就是用来解决交叉加锁的,先try_lock试探一下。当然,不加双锁最好了
2、拿着锁去join那些可能会请求锁的线程的,我看到不止3起了。
【 在 ylh1969 的大作中提到: 】
: 有成功的吗?
--
FROM 114.241.228.*