Heim  >  Fragen und Antworten  >  Hauptteil

Python内部是如何存储GC引用变量的计数的?

PHP中文网PHP中文网2741 Tage vor507

Antworte allen(1)Ich werde antworten

  • ringa_lee

    ringa_lee2017-04-18 10:10:49

    这个比较容易理解,GIL保证python byte code在进程内同时只有一个native thread在运
    行。但byte code自身的逻辑仍然需要加锁/互斥等保证线程可重入,因为byte code运行
    过程中任意点都可能被打断并切换到另外的线程。

    举个简单的例子:
    一段计数器的代码:
    // Step 1
    counter = get_counter()
    // Step 2
    counter += 1
    // Step 3
    set_counter(counter)

    假设初始Counter为0,在不做任何同步的情况下两个线程同时执行这段Python代码,
    期望结果应该是两个线程都做了计数,最终Counter应该为2:

    但由于没有进行加锁/互斥导致执行情形如下:

    1. 线程A执行完Step1时取得counter为0,这是切换到线程B

    2. 线程B顺利执行完Step1,2,3,现在Counter为1,然后切换到A

    3. 线程A继续执行完Step2得到counter为1,然后Step3设置Counter为1。

    最终结果为1.

    Antwort
    0
  • StornierenAntwort