这段代码结果我们知道,因为GIL的原因,结果是0
再看如下代码:
打印结果却是9
为什么呢?
因为在0.1秒之内,所有线程肯定都进来了,但是需要睡0.1秒,这就是阻塞状态,他们会把手里的数据让给其他线程,所以每个线程的temp都是10,阻塞结束,10减1全变成9都写入内存,最终n的值就是9了,这样就导致数据的不安全了。
怎么改进?加锁就可以了
这样打印的结果就是0了。
这段代码结果我们知道,因为GIL的原因,结果是0
再看如下代码:
打印结果却是9
为什么呢?
因为在0.1秒之内,所有线程肯定都进来了,但是需要睡0.1秒,这就是阻塞状态,他们会把手里的数据让给其他线程,所以每个线程的temp都是10,阻塞结束,10减1全变成9都写入内存,最终n的值就是9了,这样就导致数据的不安全了。
怎么改进?加锁就可以了
这样打印的结果就是0了。
上一篇:python发送邮件
一、Lock体系(一)可重入锁---ReetrantLock 1、可重入锁:线程可以进入任何一个它拥有的锁 所同步着的代码块 (ReetrantLock、synchronized) 不可重入锁:不可重复获得锁 &nb
举报文章
请选择举报类型
补充说明
0/200
上传截图
格式支持JPEG/PNG/JPG,图片不超过1.9M