标签:and 控制 port range from star 数据 模拟 cpu
(保证数据安全, 自己加锁容易出现死锁.)
为了保证数据安全而出现的一把锁,当多个进程抢占一个资源时 将并发变成了串行 谁先抢到锁先执行 如果这个程序遇到了io阻塞 操作系统会使cpu切换到其他进程,当切换到其他进程时发现他没有这吧锁,就会跳过他从而保证了数据安全
注意锁必须要同一把 多用于 抢购 依次执行
# 互斥锁与join区别共同点? (面试题)
# 共同点: 都是完成了进程之间的串行.
# 区别: join认为控制的进程串行,互斥锁是随机的抢占资源.保证了公平性
# 在生活中我们会遇到一些事情,必须在保证公平的情况下又可以保护数据安全
# 并发变为串行
# 以下是打印机实列 我们希望谁先抢到,谁先运行 且是依次执行
from multiprocessing import Process
from multiprocessing import Lock
import os
import time
import random
def task(lock):#模拟打印
lock.acquire()#加锁
print(f'{os.getpid()}打印开始了')
time.sleep(random.randint(1,3))
print(f'{os.getpid()}打印结束了')
lock.release()#解锁
if __name__ == '__main__':
lock=Lock()
for i in range(4):
p=Process(target=task,args=((lock,)))
p.start()
# 遇到的问题
# 为什么加锁要同一把锁 不是同一把会怎么样?
# 锁就是一个凭证,当只有一把锁时 他保证了运行时的唯一行,如果大家都有了也就不可以约束了
标签:and 控制 port range from star 数据 模拟 cpu
原文地址:https://www.cnblogs.com/saoqiang/p/12388470.html