Python3之互斥锁

什么是互斥锁

由于并发状态下,操作系统对多个进程进行调度,而多个进程可能都有操作硬件的需求,这时就会产生多个进程对资源的共享,而共享意味着竞争,会产生许多问题。这样就需要一种机制或者手段去解决竞争,使竞争变得有序化,从而使共享资源按照预定的结果去获取。这种手段就是加互斥锁

代码演示

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值