我正在尝试使用scoped_lock锁定另一个线程的互斥锁,以清除向量,希望代码会等到另一个线程释放它。
但是发生的是试图获取锁的函数抛出异常,表明资源正忙。
//Called from thread 1
Foo::DoStuff()
{
std::scoped_lock<std::mutex>(m_lock);
for (auto thing: stuff) //should be non trivial in size
{
thing->bar();
}
}
//called from thread 0
Foo::ClearStuff()
{
try
{
std::scoped_lock<std::mutex>(m_lock); //throws
stuff.clear();
}
catch (const std::exception& e)
{
std::cout << e.what() << std::endl;
// device or resource busy: device or resource busy
}
}
我的线程知识基于SDL2线程库,所以我不确定自己在做什么错。我使用了错误的线程构造吗?如果是这样,我应该使用什么来确保呼叫等待直到互斥体被释放?
答案 0 :(得分:1)
您需要存储作用域锁定。实际上,该锁被获取到一个临时变量中,该变量立即被销毁,从而释放了该锁。