【同步互斥】
1.同步互斥机制
-
目的:
解决对共有资源操作产生的争夺 -
临界资源:
多个进程或线程都能够操作的资源(例如终端) -
临界区:
操作临界资源的代码段 -
同步:
同步是一种合作关系,为完成某个任务多进程和多线程之间形成一种协调,
按照约定或条件依次执行操作临界资源,相互告知资源使用情况。
(这种协调可能是因为阻塞关系达成的) -
互斥:
互斥是一种制约关系,当一个进程或者线程进入临界区会进行加锁的操作。
此时其他进程(线程)再企图使用临界资源时就会阻塞,直到资源被释放才能使用。
2.同步互斥方法:
- Event 事件:
from multiprocessing import Event
- 创建事件对象:
e = Event() - 事件阻塞:
e = wait([timeout]) - 事件设置:
e.set()
对事件对象进行设置,此时wait判断如果事件被set则结束阻塞
e处于设置状态,e.wait()不在阻塞 - 事件清除:
e.clear()
e处于未设置状态,e.wait()阻塞 - 事件判断:
e.is_set()
判断e的当前状态.检测对象是否被设置,设置返回True,事件阻塞为False
示例1:
# event_test.py
from multiprocessing import Event
# 创建事件对象
e = Event()
print(e.is_set())
e.set()
# 将设置清除 wait又堵塞
e.clear()
e.wait()
print(e.is_set())
示例2:
from multiprocessing import Process,Event
from time import sleep
def wait_event()