この単純なクラスがあるとしましょう:
class example
{
bool m_isCanceled;
example() : m_isCanceled(false) {}
public:
void cancel() { m_isCanceled = true; }
void doWork()
{
for (int i = 0; i < MAX_RETRIES; ++i)
{
// Slow
doStuff();
if (m_isCanceled)
{
return;
}
}
}
}
あるスレッドを呼び出しexample::doWork()
てから、しばらくexample::cancel()
して別のスレッドを呼び出す場合、最初のスレッドがそれを確認するまでの時間に制限はありm_isCanceled
ますか?
同様の状況で、ミューテックスでm_isCanceledを保護することを提案しましたが、私の同僚は、最初のスレッドは、多くても追加の反復後に更新を確認すると述べました。これは正しいですか?