在C#中操作符是否是线程安全的/原子的?

问题描述 投票:1回答:1

以下代码是线程安全的吗?

public object DemoObject {get;set;}

public void DemoMethod()
{
    if (DemoObject is IDemoInterface demo)
    {
        demo.DoSomething();
    }
}

如果在处理DemoObject时其他线程修改了DemoMethod(例如,设置为空),是否保证在if块内始终将本地变量demo正确分配(给一个类型的实例) IDemoInterface)?

c# multithreading atomicity
1个回答
0
投票

答案是否定的。。。也许(取决于valuereference类型)...

但是,为简单起见,请查看此example here,您将看到示例分解为以下内容,并且不是线程安全

IDemoInterface demoInterface = DemoObject as IDemoInterface;
if (demoInterface != null)
{
    demoInterface.DoSomething();
}
© www.soinside.com 2019 - 2024. All rights reserved.