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

认证高级PHP讲师

全部回复(1)
左手右手慢动作

这个比较容易理解,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.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!