事前にお詫び申し上げます:この問題は、高度なC#を学ぶことを試みている、改訂されていないハードコアのC++開発者からのものです。以下を考慮してください。C#6ですか? (Elvis op)thread safe?もしそうなら、どうですか?
if (myUserDefinedObject != null)
{
myUserDefinedObject.ToString();
}
これは明らかにスレッドセーフではありません。一方、私は言う2つのチュートリアルを見た?例えば(ヌル条件演算子や 'エルビス演算子')、
myUserDefinedObject?.ToString();
はスレッドセーフです。コンパイラがカバーの下にある[ミューテックス]ロックを覆っていない限り、私はそれがどういうことができるのか理解していません。このイディオムがスレッドセーフであれば、誰かがそれがどのように達成されているかの技術的な説明を私に指摘できますか?スレッドセーフでない場合は、実際にはそうではないと言われるリファレンスは誰にもありますか?
申し訳ありませんが、コードの最初のブロックは、使用されているコンテキストと関連する変数のスコープに応じて、完全にスレッドセーフにすることができます。 –
@KenWhite - 最初のブロックのアイデアは、別のスレッドがチェックの後、 '.ToString()'の前に変数を 'null'に設定してコードを失敗させることができると思います。私はスレッドセーフではないと言います。 – Enigmativity
@Enigmativity:ポスターは、コードブロックがスレッドセーフではない**と言っていました**、コンテキストやスコープを知らなくても正確なステートメントではありません。ステートメントが不正確であることを指摘しました。ブロック内のコードが確実にスレッドセーフではないことは間違いです。 –