线程锁 Lock
作者: 莫烦 发布于: 2016-01-01
编辑: 学习资料:
导入线程标准模块
不使用 Lock 的情况¶
函数一:全局变量A的值每次加1,循环10次,并打印
函数二:全局变量A的值每次加10,循环10次,并打印
主函数:定义两个线程,分别执行函数一和函数二
完整代码:
运行结果(在spyder编译器下运行的打印结果):
可以看出,打印的结果非常混乱
使用 Lock 的情况¶
lock在不同线程使用同一共享内存时,能够确保线程之间互不影响,使用lock的方法是, 在每个线程执行运算修改共享内存之前,执行lock.acquire()
将共享内存上锁, 确保当前线程执行时,内存不会被其他线程访问,执行运算完毕后,使用lock.release()
将锁打开, 保证其他的线程可以使用该共享内存。
函数一和函数二加锁
主函数中定义一个Lock
完整的代码
运行结果
从打印结果来看,使用lock
后,一个一个线程执行完。使用lock
和不使用lock
,最后打印输出的结果是不同的。