クラスファイルがあります。2 つのスレッド A と B を作成しました。A と B では、各スレッドに auto 変数を作成しますFile myfile
。そして、AとBがそれを操作します。それは安全ですか?それはデータの不整合につながりますか?
3 に答える
File
純粋なメモリ リソースの観点からは、変数のスコープに依存します。
それらがローカル関数変数である場合は、問題ありません。実行の各スレッドは、ローカル変数を作成する他のスレッドから完全に分離された独自のスタックを所有します。
である場合
static
、同じグローバル アドレスを参照しています。
ファイル アクセスの観点からは、それが同じファイルであるかどうか、また書き込みを行っているかどうかによって異なります。
各スレッドには独自のスタックがあり、変数の各インスタンスはそのスタック上に存在するため、変数は互いに区別されます。
ただし、基になるファイルシステム ファイルにアクセスしているようです。同じファイルで、一方または両方のスレッドがファイルに書き込みを行っている場合、データの一貫性の問題が発生する可能性があります。オペレーティング システムのドキュメントを参照して、その内容を確認する必要があります。両方のスレッドが同じファイルから読み取っているだけであれば問題ありません。
いいえ、スレッドの各インスタンスには変数の独自のインスタンスがあるため、それは問題になりません。
変数のアドレスを確認してください。それらが異なる場合 (私があなたを正しく理解していればそうなるでしょう)、問題ありません。
スレッド間の不一致は、2 つのスレッドが同時に同じ変数にアクセスする場合にのみ発生します。「同じ名前」だけでなく、実際には同じ変数です。
ここで、変数がグローバルで、両方のスレッドがそれにアクセスする場合、データの破損を防ぐためにある種の相互排除が必要になりますが、自動変数は安全です。