スレッドに WinAPI を使用するコードを、新しい標準スレッド ライブラリを使用するように書き直しています。
ミューテックスが放棄または失われたことに気付くために、C++ 11で同等の方法は何だろうと思っていました。
次のコードは、作成されたスレッドに初期化手順を「アウトソーシング」する必要がありますが、それが完了して初期化の結果がわかるまで戻るべきではありません。
bool Foo::Example()
{
m_thread = std::thread(&Foo::ThreadProc, this);
// wait for event before waiting for mutex
WaitForSingleObject(m_hEvent, INFINITE);
ResetEvent(m_hEvent);
// the thread aquired the mutex. now wait until it is released or abandoned
DWORD ret = WaitForSingleObject(m_hMutex, INFINITE);
ReleaseMutex(m_hMutex);
// check the result
if (ret == WAIT_ABANDONED)
return false;
return true;
}
void Foo::ThreadProc()
{
// aquire mutex and signal that it's done
WaitForSingleObject(m_hMutex, INFINITE);
SetEvent(m_hEvent);
// ... initialization (required to be in this thread)
if (initializationfailure)
return; // failure. mutex is abandoned
// success. mutex is unlocked
ReleaseMutex(m_hMutex);
// ... do the work
}
WAIT_ABANDONED チェックの代わりになるものは何ですか? std::mutex には何も見つかりませんでした。同等のものはThe behavior is undefined if the mutex is not unlocked before being destroyed, i.e. some thread still owns it.
ありませんか?これに近い std スレッド ライブラリに何かありますか?
また、コードを改善するための提案も受け付けています。このような単純なタスクには同期が多すぎるようです。