Python多线程4 共享资源加锁threading.lock()

学习来源

在第一节中说道多线程更像一种分时获得资源的机制,那么如果线程2需要在线程1的结果基础上才能继续,如果不加限制的话,线程2会在线程1操作未完成之前获得资源,这时候就让线程2开始工作,显然不能get到想要的结果。

编写成前后串行的程序结构是一种解决方案,如果线程2的大多数操作与线程1没有干扰,还是有让它们并行来提高效率的意义的,需要做的就是控制它们对都共同的对象的操作,必须在线程1操作完成之后,线程2才能操作。

上面说的就是一种加锁的机制,线程1在开始操作之前,把冲突的操作对象做加锁操作,达到的效果就是这部分完成之前,其他线程将无法获得时间片。线程1操作结束之后,将锁释放,其他线程(线程2)进而也就可以对共同对象进行操作了

上代码

声明一个锁对象lock = threading.Lock()

锁定操作lock.acquire()

解锁操作lock.release()

被注释起来的代码是不含加锁机制的程序,打印结果将会出现job1和job2交错print的混乱结果(每个job的操作很少,如果你的处理器太快的话,可能会发生job1在一个时间片内全部完成,就不会显示出错乱,可以把每个job中的range()中的数字加大来观察交错print的现象)

使用加锁机制后,job2会在job1最终结果A=10的基础上进行操作,print也不会错乱

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注