Python内部是如何存储GC引用变量的计数的?
PHP中文网
PHP中文网 2017-04-18 10:08:49
0
1
497
PHP中文网
PHP中文网

认证高级PHP讲师

全員に返信(1)
左手右手慢动作

これは理解しやすいです。GIL は、Python バイト コードがプロセス内で同時に実行されるネイティブ スレッドが 1 つだけであることを保証します。ただし、バイト コード自体のロジックでは、スレッドが再入可能であることを保証するためにロック/相互排他などが依然として必要です。これは、バイト コードが実行プロセス中の任意の時点で中断され、別のスレッドに切り替わる可能性があるためです。

簡単な例:

カウンター コード:

// ステップ 1
counter = get_counter()
// ステップ 2
counter += 1
/ /ステップ 3
set_counter(counter)

最初のカウンタが 0 で、2 つのスレッドがこの Python コードを同期せずに同時に実行すると仮定します。

期待される結果は両方のスレッドがカウントし、最終的なカウンタは 2 になるはずです。


ただし、ロック/相互排他がないため、実行状況は次のようになります。

    スレッド A がステップ 1 の実行を完了すると、カウンターは 0 になります。これは、スレッド B に切り替えることを意味します
  1. スレッド B はステップ 1、2、3 を正常に実行しました。現在、カウンターは 1 であり、その後 A
  2. に切り替わります。

  3. スレッド A はステップ 2 を実行し続けてカウンタを 1 に設定し、次にステップ 3 でカウンタを 1 に設定します。
  4. 最終結果は 1 です。
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!