4

つまり、新しいスレッドを開始するときに、スレッドが開始する前に初期化された変数を、新しく開始されたスレッドから読み取るのは安全ですか?

UPDなぜ私が尋ねているのですか?一部の開発者は、それが存在すると想定し、明示的なメモリバリアを使用しないためです。そして、そのコードのバグを再現することはできませんでした。ただし、ドキュメントhttp://msdn.microsoft.com/en-us/library/ms686355(v=vs.85).aspxには、これが安全であるとは記載されていません。

4

1 に答える 1

5

はい、オペレーティング システムは暗黙的なバリアを提供します。スレッド スケジューラのデータ構造を保護する内部ロックを取得しないと、スレッドを開始できません。

私が知っていることは、明示的に約束されていません。.NET 2.0 以降、Thread と ProcessThread の間に直接的な対応はなくなりました。このリンクは、ファイバーを使用してスレッドを実装したいと考えていた SQL Server チームの要求で壊れました。これは実際には起こりませんでした。十分に信頼できるものにできなかったときに、彼らはプロジェクトをあきらめました。このプロジェクトの結果と、これを再び利用しようとしたことがわかっている主流のプロジェクトがないこと、およびロックを使用しないスレッドサポートを実装することの難しさを考えると、私はそれを仮定するのは安全だと思います.暗黙のバリアに頼ることができます。

于 2012-05-20T12:08:05.930 に答える