ringa_lee2017-04-18 10:10:49
これは理解しやすいです。GIL は、Python バイト コードがプロセス内で同時に実行されるネイティブ スレッドが 1 つだけであることを保証します。ただし、バイト コード自体のロジックでは、スレッドが再入可能であることを保証するためにロック/相互排他などが依然として必要です。これは、バイト コードが実行プロセス中の任意の時点で中断され、別のスレッドに切り替わる可能性があるためです。
簡単な例:
// ステップ 1
counter = get_counter()
// ステップ 2
counter += 1
/ /ステップ 3
set_counter(counter)
最初のカウンタが 0 で、2 つのスレッドがこの Python コードを同期せずに同時に実行すると仮定します。
ただし、ロック/相互排他がないため、実行状況は次のようになります。
に切り替わります。