09_解决进程间通信线程间通信的资源竞争-同步互斥机制
1.同步和互斥
1.目的: 对共有资源的操作会产生争夺,同步互斥是一种解决争夺的方案
2.临界资源: 多个进程或线程都可以操作的资源
3.临界区: 操作临界资源的代码段
4.同步:
同步是一种合作关系,为完成某个任务多进程或多线程之间形成一种协调,按照条件依次执行传递告知资源情况,这种协调可能是因为阻塞关系达成的
同步就是协同步调,按预定的先后次序进行运行,如:消息队列通信
进程(线程)同步可理解为进程(线程)A和B一块配合,A执行到一定程度时要依靠B的某个结果于是停下来示意B运行;B执行再将结果给A;A再继续操作
5.互斥:
互斥是一种制约关系,一个进程(线程)进入到临界区会进行加锁操作,其它进程(线程)在企图操作临界资源就会阻塞,只有当资源被释放才能进行操作
当多个线程同时修改共享数据的时候,需要进行同步控制,使用互斥锁则保证了每次只有一个线程进行写入操作,保证了多线程情况下数据的正确性
某个线程要更改共享数据时,先将其锁定此时资源即上锁,其他线程不能更改;直到该线程释放资源即解锁,其他的线程才能再次锁定该资源
2.进程事件-Event
1.进程事件概述: 一个进程通过对Event的事件状态的设置,另外一个进程判断事件状态来确认是阻塞等待还是继续执行
2.语法概述
from multiprocessing import Event e = Event() # 创建事件对象 e.wait() # 提供事件阻塞 e.set() # 对事件对象进程设置,此时wait判断如果事件被set则结束阻塞 e.clear() # 清除该事件对象的set e.is_set() # 监测对象是否被设置,设置返回True