python进阶--多线程,锁的问题

1、先了解一下锁的理论知识。
同步
就是协同步调,按预定的先后次序进行运行,"同"字,协同、协助、互相配合。如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时,要依赖B的某个结果,停止,示意B执行,再将结果给A,A再继续操作

互斥锁
线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制就引入互斥锁。
互斥锁为资源引入一个状态:锁定/非锁定。
某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其余线程不能修改,直到该线程释放资源,将资源的状态变成“非锁定”,其余线程方再次锁定该资源。互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的更高的正确性。
2、在threading模块中,定义了Lock类,可以来处理锁定:
#创建锁
Q1=threading.Lock()
锁定
Q1.acquire()
释放
Q1.release()

如下为不上锁的脚本。运行后,任务之间会来回切换,互相争抢资源。
python进阶--多线程,锁的问题_第1张图片
3、来看一下上锁释放锁的脚本。如果是多个线程,当任务开始的时候,会争相抢夺这个锁,谁先抢到,谁先上锁,任务执行完,释放锁,下一个任务继续执行。避开了争资源的情况。
python进阶--多线程,锁的问题_第2张图片
接上面的脚本。
python进阶--多线程,锁的问题_第3张图片
加了锁之后进程会变慢,慢就慢在加锁释放锁的这些环节。

你可能感兴趣的:(笔记,python)