我是否需要线程锁值类型(特别是布尔值)



我知道我不能在值类型上使用锁(SyncLock),正如本文所解释的:

http://msdn.microsoft.com/msdnmag/issues/03/01/NET/

但我的问题是,这是否意味着我不需要这样做?还是我需要将布尔值包装在一个对象中,这样它就可以被锁定?如果答案是否定的,我不需要锁定它,当两个线程试图同时更改值时会发生什么?在我目前正在处理的应用程序中,可能有两个线程可以尝试同时将其设置为true和false。

布尔值本身不需要锁。
如果它在你的脚下变化,你可能会得到旧的值或新的值,这是OK的。
但是,通常情况下,变量本身并不存在。它的价值与他人的价值相关,你需要保护整个群体。
例如,您可能有一个列表,如果列表已满,则使用布尔指示。您需要一个同时覆盖它们的锁,以保持两者的一致性。

最新更新