我有線程列表執行命令離開臨界區
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);
及第二線程這增加了命令列表:在執行命令
第一個線程可能會崩潰,因此臨界區不能被第二個線程訪問:
如果一個線程終止,而它擁有ac政治部分,關鍵部分的狀態是不確定的。 Source
那麼,什麼是處理這個問題的好辦法嗎? 我能想到的一些解決方案,但他們似乎棘手(添加第三線程,第二臨界區等)
(CriticalSection的它是CRITICAL_SECTION只是簡單的包裝)
你需要什麼是所謂的範圍鎖定包裝是關鍵部分。它鎖定範圍條目(或手動),但保證在範圍退出時解鎖(如果鎖定),*包括通過例外*退出。 – WhozCraig
你是什麼意思線程是「崩潰」?我認爲一個線程不會「崩潰」,只是一個進程。 –
你是對的,它會崩潰整個過程,但單線程可以被外部進程終止。這使得我的問題沒那麼有意義,雖然... – lowliet