线程锁概述
同处一个进程的线程间共享数据,这在一定程度上减少了程序的开销。凡事有利必有弊,因为多个线程可以访问同一份资源,所以可能会造成资源不同步的问题。假设售票厅有100张火车票,它同时开启两个窗口(视为线程)卖票,每出售一张火车票显示当前的剩余票数,由于两个窗口共同修改同一份车票资源,容易导致票数混乱,如图1所示。
图1 卖火车票示例
从图1可以看出,窗口1和窗口2显示的剩余票数均为90,它们各卖出一张票之后,都会在显示剩余票数的基础上减去1,使得最终显示的剩余票数都是89。为了解决这类问题,Python中引入了互斥锁和可重入锁,保证任一时刻只能有一个线程访问共享的数据。