最近,我看到了一个网站,这个代码,我的问题是:多线程时锁定单个布尔变量?
private bool mbTestFinished = false;
private bool IsFinished()
{
lock(mLock)
{
return mbTestFinished;
}
}
internal void SetFinished()
{
lock(mLock)
{
mbTestFinished = true;
}
}
在多线程环境中,真的有必要锁定访问mbTestFinished
?
它是确保它不是CPU缓存读取的最可证明的机制(在线程之间不会很好地工作) - volatile也可以工作,但是由于太复杂的原因(这不是*意图*'volatile',而是:副作用) – 2012-03-30 09:12:54
@MarcGravell我一直认为_was_是volatile的意图;你有可能放弃解释什么是好的链接吗? – 2012-03-30 09:21:16
@romkyns:这[回答](http://stackoverflow.com/a/4103879/158779)提供了一些见解。 – 2012-03-30 14:54:01