相关疑难解决方法(0)

为什么我们不能锁定值类型?

我想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:我知道关于如何正确锁定值类型的这个问题.我的问题与如何但与原因无关.

c# multithreading locking reference

51
推荐指数
5
解决办法
2万
查看次数

标签 统计

c# ×1

locking ×1

multithreading ×1

reference ×1