引入:

  进程之间数据不共享,但是共享同一套文件系统(如硬盘、键盘、cpu等),所以访问同一个文件,或同一个打印终端,是没有问题的,竞争带来的结果就是错乱,如何控制,就是加锁处理,即进程加锁。

 1 #并发运行,效率高,但竞争同一打印终端,带来了打印错乱
 2 from multiprocessing import Process
 3 import os,time
 4 def work():
 5     print('%s is running' %os.getpid())
 6     time.sleep(2)
 7     print('%s is done' %os.getpid())
 8 
 9 if __name__ == '__main__':
10     for i in range(3):
11         p=Process(target=work)
12         p.start()
13 
14 # 并发运行,效率高,但竞争同一打印终端,带来了打印错乱

 

特点:

  1.某进程先获取到cpu资源之后,要立即上锁,避免其他人对资源的竞争,只有当该进程解锁(释放)之后,剩余的进程才能进行竞争。

  2.进程互斥锁使得程序的执行顺序成为串行,牺牲了效率,但提高了安全性。

  3.同一时刻只允许一个进程运行,其他进程只能等待。(这与后面的信号量相反,信号量允许多个进程同时运行)

代码示例:

 1 from multiprocessing import Process,Lock
 2 import os,time
 3 def work(lock):
 4     lock.acquire() #上锁
 5     print('%s is running' %os.getpid())
 6     time.sleep(2)
 7     print('%s is done' %os.getpid())
 8     lock.release()#解锁
 9 if __name__ == '__main__':
10     lock = Lock()#创建一个互斥锁对象
11     for i in range(3):
12         p=Process(target=work,args=(lock,))
13         p.start()
进程互斥锁

相关文章: