提前道歉:这个问题来自于一个努力学习高级C#的硬核,未改编的C++开发人员。考虑以下内容:是C#6吗? (猫王op)线程安全吗?如果是这样,怎么样?
if (myUserDefinedObject != null)
{
myUserDefinedObject.ToString();
}
这显然不是线程安全的。另一方面,我见过两篇教程说? (消零条件运算符或 '猫王运营商')例如,
myUserDefinedObject?.ToString();
IS线程安全的。除非编译器在封面(shiver)下包裹一个[mutex?]锁定,否则我不明白这是怎么回事。如果这个习语是线程安全的,那么有人能够指出我是如何完成该技术的技术描述的?如果它不是线程安全的,有没有人有一个实际上说它不是?
对不起,但您的第一个代码块可以完全线程安全,具体取决于使用它的上下文和变量的范围。 –
@KenWhite - 我认为第一个块的想法是,另一个线程可能会在检查之后但在.ToString()导致代码失败之前将该变量设置为null。我会说它不是线程安全的。 – Enigmativity
@Enigmativity:海报明确表示,该代码块是**不是线程安全**,如果不知道上下文或范围,这不是一个准确的陈述。我指出,该声明是不准确的 - 这是不真实的,该块中的代码明确不是线程安全的。 –