什么是互斥锁
由于并发状态下,操作系统对多个进程进行调度,而多个进程可能都有操作硬件的需求,这时就会产生多个进程对资源的共享,而共享意味着竞争,会产生许多问题。这样就需要一种机制或者手段去解决竞争,使竞争变得有序化,从而使共享资源按照预定的结果去获取。这种手段就是加互斥锁
代码演示
import json
import os
from multiprocessing import Process, Lock
def check_ticket():
dic = json.load(open('a.txt'))
print('剩余票数:', dic['ticket'])
def deal_ticket():
dic = json.load(open('a.txt'))
if dic['ticket'] > 0:
dic['ticket'] -= 1
json.dump(dic, open('a.txt', 'w'))
print('%s购票成功' % os.getpid())
else:
print('%s购票失败' % os.getpid())
def buy_ticket(mutex):
check_ticket()
# 获取互斥锁后,进程只能在释放锁后下个进程才能进来
mutex.acquire()
deal_ticket()
# 互斥锁必须被释放掉
mutex.release()
if __name__ == '__main__':
mutex = Lock()
for i in range(10):
p = Process(target=buy_ticket, args=(mutex,))
p.start()
加锁释放锁主要通过以下代码去实现:
mutex = Lock()
mutex.acquire()
mutex.release()