web-dev-qa-db-ja.com

Java volatile in Python

PythonにはJava volatileの概念と同等のものがありますか?

Javaにはキーワードvolatileがあります。私が知る限り、変数を宣言するときにvolatileを使用すると、その変数の値が変更されます同時に実行されているすべてのスレッドに表示されます。

Pythonにも同様のものが存在するかどうかを知りたいので、関数で変数の値が変更されたときに、その値が同時に実行されているすべてのスレッドに表示されます。

7
Pablo

私の知る限り、変数を宣言するときにvolatileを使用すると、その変数の値に対する変更は、同時に実行されているすべてのスレッドに表示されます。

volatileはそれより少し微妙です。 volatileは、Javaが変数値を格納および更新することを保証しますメインメモリ内volatileがない場合、JVMは代わりに、CPUキャッシュ内の値副作用異なるCPUコアで実行されている異なるスレッド(同じコアで同時に実行されているスレッド)からは見えない値への更新の更新値を参照してください)。

Pythonはこれを行いません。 Pythonストアすべてのオブジェクトヒープ、メインメモリに保存されます。さらに、Pythonインタープリタループがロックを使用する方法により( GIL)、一度に1つのスレッドのみがアクティブに実行されますPythonコード。異なるスレッドがPythonインタープリターループを実行している可能性は決してありません。別のCPU。

したがって、Pythonでvolatileを使用する必要はありません。そのような概念はなく、心配する必要もありません。

15
Martijn Pieters