同步互斥机制:
- 解决了多个进程或者线程对共享资源的争夺,因为某些共享资源在某个时刻可能只允许一个进程对其进行访问。
首先需要了解几个概念:
临界资源:
- 临界资源就是上面提到的,同时只允许一个进程对其进行访问的资源,即:虽然是共享资源,但是不能多个进程同时对资源进行访问和操作。多进程之间需要遵守某些约定来对临界资源进行访问和操作。
临界区:
- 临界区就是我们写的多进程代码中,对临界资源进行操作的那一部分代码段(区域)。
之前说了多进程之间需要遵守某些约定来对临界资源进行访问和操作,就是同步和互斥。
同步:
- 同步可以理解为是一种合作关系,为了完成某项任务(访问临界资源),多个进程之间通过合作协调,排好顺序,依次操作。举个例子,在医院的一个诊室外排了很多看病的人,基于重症排在前,轻症排在后的规则排好了顺序,医生就可以看成是一个临界资源,医生每次只能看一个病人(每次只有一个病人(进程)能进诊室看医生(临界资源)),然后依次看完所有的病人。
互斥:
- 互斥则是一种制约关系,进程访问临界资源时会上锁,使得其他进程阻塞等待,直到上一个进程退出后解锁,下一个进程才能够访问临界资源。还是上面的例子:在医院的一个诊室外有很多看病的人,并没有按照顺序排着,医生每次只能看一个病人,病人通过争夺抢占看谁先进入诊室,一个病人进入诊室后,就将诊室的门锁上(上锁),阻止其他病人进入,直到这个病人看完后,打开门出了诊室(解锁),剩下的病人又开始争夺抢占看谁先进入诊室。
Event事件
- Event事件通常用于主进程控制其他进程的执行,Event事件主要提供了三个方法set、wait、clear。
- 事件处理的机制:全局定义了一个标志,如果标志的值为 False,那么当程序执行到wait方法时就会阻塞。如果标志值设为True,那么wait方法便不再阻塞了。
- Event事件对象的set方法将标志设为true,clear方法将标志设置为False,wait方法则是在标志值为False时阻塞等待。
主要方法:
e = Event()
- 功能:创建事件对象
e.wait([timeout])
- 功能:设置事件阻塞
- 参数(timeout):阻塞等待时间
e.set()
- 功能:事件设置,当事件被设置后e.wait()不再阻塞
e.clear()
- 功能:清除设置,当事件设置被清除后e.wait又会阻塞
e.is_set()
- 功能:事件状态判断
- 返回值:True(wait方法未阻塞),False(wait方法阻塞)
代码实现:
from multiprocessing import Process,Event
from time import sleep
def test1():
print("test1想操作文件")