线程锁 Lock
切换视频源:

线程锁 Lock

作者: Leoliao 编辑: 莫烦 发布于: 2016-01-01

学习资料:

导入线程标准模块

不使用 Lock 的情况

函数一:全局变量A的值每次加1,循环10次,并打印

函数二:全局变量A的值每次加10,循环10次,并打印

主函数:定义两个线程,分别执行函数一和函数二

完整代码:

运行结果(在spyder编译器下运行的打印结果):

可以看出,打印的结果非常混乱

使用 Lock 的情况

lock在不同线程使用同一共享内存时,能够确保线程之间互不影响,使用lock的方法是, 在每个线程执行运算修改共享内存之前,执行lock.acquire()将共享内存上锁, 确保当前线程执行时,内存不会被其他线程访问,执行运算完毕后,使用lock.release()将锁打开, 保证其他的线程可以使用该共享内存。

函数一和函数二加锁

主函数中定义一个Lock

完整的代码

运行结果

从打印结果来看,使用lock后,一个一个线程执行完。使用lock和不使用lock,最后打印输出的结果是不同的。


降低知识传递的门槛

莫烦经常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛免费 奉献我的所学正是受这种态度的影响。 【支持莫烦】 能让我感到认同,我也更有理由坚持下去。

我组建了微信群,欢迎大家加入,交流经验,提出问题,互相帮持。 扫码后,请一定备注"莫烦",否则我不会同意你的入群申请。

wechat

    多线程 (Threading)