假设我们有这个简单的类:
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,但我的同事说第一个线程最多会在额外的迭代后看到更新。这是正确的吗?