基础理解Threading模块(2)-线程

解决全局变量数据可能产生错误的解决办法,

方法一、同时解析线程等待(协同步调)     join()。解析:线程同步是保证在同一时刻只能有一个线程进行去操作全部变量

方法二:互斥锁(Lock)    解析:对共享数据(可以理解为:全局变量)进行锁定,多个线程去抢,谁先抢到就谁先用。没有抢到的线程就等待,直至所有全部线都运行完成

# 创建互斥锁的方法
mutex = threading.Locak()
# 上锁
mutex.acquire()
# 解锁
mutex.release()

代码解析:1、在任意一个方法上锁的时候。其他方法是无法上锁的。就好比到网吧上网一台电脑只能有一个网瘾少年使用(假设这个网吧只有一台电脑)。如果有N个少年等着上网,那么他们就必须等到这个网瘾少年下机后才能有机会上网

无论对于join()(协同步调)还是threading.Lock()(互斥锁)来说,它们都是把多任务改成单任务去执行,保证了数据的准确性,同时都执行性能(速度)下降

思考: 1、如果只上锁不解锁会产生什么结果(在这种情景叫死锁)

代码解析:在"i"等于3时(下标从0算起)进入了if 语句。虽然有返回语句。但没有进行解锁。所有线程会一直运行不会停止

 


版权声明:本文为weixin_41816911原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。