在下面的代码中,事件可能会抛出异常并且它可能不会在偶数处理程序中处理,(罕见但仍然如此)
我希望在执行事件时保持“lck2”解锁,因为我不希望“mtx2”的主线程阻塞,原因无非是优化。
我可以保证“lck2”总是在 catch 块中释放吗?或者可能存在运行时异常,因此可能导致死锁或一些意外行为?
std::unique_lock<std::mutex>lck2(mtx2); // lock used for waiting for event.
while (_isRunning)
{
try
{
while (_isRunning)
{
// cvar2 is condition variable
cvar2.wait(lck2, [&] {return invoke; }); // wait until invoke == true
if (invoke) // if event must be invoked
{
lck2.unlock();
OnEvent(this, someproperty); // may throw exception
lck2.lock();
invoke = false; // execution completed
}
}
}
catch (...) // we need to keep this thread alive at all costs!
{
lck2.lock(); // is this safe?
invoke = false;
}
}