多线程
1. 全部变量
主线程下的变量, 多任务共享全局变量
结果为:
说明:
类中创建 函数run(), 通过函数demo()实例化对象来创建线程, 此时线程会自动调用类中的run()来执行。
全局变量a ,它的值会在线程执行过程中改变。并且是在生成的两个线程中都可以改变。说明此全局变量可以被线程共享使用
注:全局变量的问题:
此代码存在资源竞争问题:当run()中的循环次数增加到足够多时,就会出现一个问题,如,当a的值为3时,一个线程取到了这个值3,并改变了a的值(a=4),另一个线程同时取到a的值3,并改变了a的值(a=4),这时的变量值就会出现误差。循环次数越大,出现这种问题的概率就越大
结果:
2. 处理全局变量资源竞争问题---互斥锁
使用python 库 threading中的Lock功能,可以生成一把锁(默认锁是打开的)。
将每个线程中,改变全局变量的部分用锁锁住(上锁:threading.Lock.acquire() 解锁:threading.Lock.release()), 之后,哪个线程抢先执行到互斥锁的位置,哪个先上锁,其它线程必须等到此线程解锁后,才能继续执行
结果:
原文:https://www.cnblogs.com/leafchen/p/11599229.html