提前道歉:這個問題來自於一個努力學習高級C#的硬核,未改編的C++開發人員。考慮以下內容:是C#6嗎? (貓王op)線程安全嗎?如果是這樣,怎麼樣?
if (myUserDefinedObject != null)
{
myUserDefinedObject.ToString();
}
這顯然不是線程安全的。另一方面,我見過兩篇教程說? (消零條件運算符或 '貓王運營商')例如,
myUserDefinedObject?.ToString();
IS線程安全的。除非編譯器在封面(shiver)下包裹一個[mutex?]鎖定,否則我不明白這是怎麼回事。如果這個習語是線程安全的,那麼有人能夠指出我是如何完成該技術的技術描述的?如果它不是線程安全的,有沒有人有一個實際上說它不是?
對不起,但您的第一個代碼塊可以完全線程安全,具體取決於使用它的上下文和變量的範圍。 –
@KenWhite - 我認爲第一個塊的想法是,另一個線程可能會在檢查之後但在.ToString()導致代碼失敗之前將該變量設置爲null。我會說它不是線程安全的。 – Enigmativity
@Enigmativity:海報明確表示,該代碼塊是**不是線程安全**,如果不知道上下文或範圍,這不是一個準確的陳述。我指出,該聲明是不準確的 - 這是不真實的,該塊中的代碼明確不是線程安全的。 –