Я пытаюсь заблокировать мьютекс из другого потока, очистить вектор, используя 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, поэтому я не уверен, что делаю неправильно. Я использую неправильную конструкцию потока? Если так, что я должен использовать, чтобы гарантировать, что вызов ждет, пока мьютекс не будет освобожден?