要解决的问题:
程序中可能存在多个线程要同时访问一个资源,这在某些资源中是不允许的,需要保证同一时间段只有一个线程访问资源。
解决的方案是:
用线程锁(threading.Lock() ),在线程访问共享资源时,把需要解决冲突资源加锁保护。
具体实施:
import threading
self.lock=threading.Lock()
def main1(self):
print("新线程启动")
self.lock.acquire()#上锁
print("new come")
for i in range(5):
time.sleep(1)
print(i)
self.lock.release() #释放锁
Thread_auto_1 = threading.Thread(target=self.main1)
Thread_auto_2 = threading.Thread(target=self.main1)
Thread_auto_1.start()
Thread_auto_2.start()
运行结果:
新线程启动
新线程启动
0
1
2
3
4
0
1
2
3
4
程序解析:
从运行结果来看,两线程同时调用了main1函数,都打印了“新线程启动”,但是由于线程1对print加锁了,所以线程2会自动等待线程1把锁释放了,再执行。这样就避免了两个线程对资源的抢占了。