我想lock一个Boolean变量时,我遇到了以下错误:
'bool'不是lock语句所要求的引用类型
似乎在lock语句中只允许引用类型,但我不确定我理解为什么.
安德烈亚斯在评论中说:
当[值类型]对象从一个线程传递到另一个线程时,会生成一个副本,因此线程最终会处理2个不同的对象,这是安全的.
这是真的吗?这是否意味着当我执行以下操作时,我实际上在修改和方法x中的两个不同?xToTruexToFalse
public static class Program {
public static Boolean x = false;
[STAThread]
static void Main(string[] args) {
var t = new Thread(() => xToTrue());
t.Start();
// ...
xToFalse();
}
private static void xToTrue() {
Program.x = true;
}
private static void xToFalse() {
Program.x = false;
}
}
Run Code Online (Sandbox Code Playgroud)
(仅此代码在其状态下显然无用,仅用于示例)
PS:我知道关于如何正确锁定值类型的这个问题.我的问题与如何但与原因无关.