互斥锁

fraternityjava 2020-03-01

互斥锁

(保证数据安全, 自己加锁容易出现死锁.)

为了保证数据安全而出现的一把锁,当多个进程抢占一个资源时 将并发变成了串行  谁先抢到锁先执行 如果这个程序遇到了io阻塞 操作系统会使cpu切换到其他进程,当切换到其他进程时发现他没有这吧锁,就会跳过他从而保证了数据安全     
注意锁必须要同一把   多用于 抢购 依次执行

互斥锁与join区别共同点?

# 互斥锁与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()
# 遇到的问题
# 为什么加锁要同一把锁 不是同一把会怎么样?
# 锁就是一个凭证,当只有一把锁时 他保证了运行时的唯一行,如果大家都有了也就不可以约束了

相关推荐