我有线程执行列表中的命令
do
{
commandExec->criticalSection.EnterCS();
if (!commandExec->commands.empty())
{
commandExec->ExecuteCommand(commandExec->commands.front());
commandExec->commands.pop_front();
}
else
commandExec->criticalSection.SuspendThread();
commandExec->criticalSection.LeaveCS();
} while (commandExec->maintainCommandExecution);
第二个线程将命令添加到列表:
criticalSection.EnterCS();
commands.push_back(Command(code, parameters));
criticalSection.LeaveCS();
criticalSection.ResumeThread();
第一个线程在执行命令时可能会崩溃,因此第二个线程无法访问临界区:
如果线程在拥有临界区所有权时终止,则临界区的状态未定义。 资源
那么,处理这个问题的好方法是什么? 我可以想到一些解决方案,但它们似乎很棘手(添加第三个线程、第二个关键部分等)
(criticalSection 它只是 CRITICAL_SECTION 的简单包装器)