zoukankan      html  css  js  c++  java
  • 互斥锁

    '''
    模拟抢票不加互斥锁的情况下,所有抢票的进程都是并发,操作同一份数据,会造成数据错乱
    这个时候必须加锁处理
    将并行变成串行
    这样会降低进程的执行效率,但会提高数据的安全性
    
    注意:
        1.锁不要轻易使用 容易造成死锁现象
        2.只在处理数据的部分加锁不要再全局加锁
    
    锁必须在主进程中产生,交给子进程去使用
    '''
    # 模拟抢票
    import json
    from multiprocessing import Process, Lock
    import time
    
    
    def check():
        with open(r'D:pyday30	icket', 'r', encoding='utf-8') as f:
            res = json.load(f)
        if res.get('ticket'):
            print('余票%s' % res.get('ticket'))
            return True
        print('余票不足')
    
    
    def buy(i):
        with open(r'D:pyday30	icket', 'r', encoding='utf-8') as f:
            res = json.load(f)
        time.sleep(1)
        if not res.get('ticket'):
            print('%s没抢到票' % i)
            return
        res['ticket'] -= 1
        with open(r'D:pyday30	icket', 'w', encoding='utf-8')as f:
            json.dump(res, f)
            f.flush()
        print('%s 抢到票了' % i)
    
    
    def run(i, mutex):
        res = check()
        if not res:
            return
        mutex.acquire()  # 抢锁  只要有人抢到了锁 其他人必须等待该人释放锁 随机抢
        buy(i)
        mutex.release()  # 释放锁
    
    
    if __name__ == '__main__':
        mutex = Lock()  # 生成一把锁
        for i in range(10):
            p = Process(target=run, args=(i, mutex))
            p.start()
  • 相关阅读:
    DPDK ring简单说明
    DPDK初始化流程
    从《雪白血红》说起(2)
    从《雪白血红》说起(1)
    苏联印象(1)-过往与想象
    DPDK ip分片与重组的设计实现
    linux协议栈分析-序
    DPDK与QoS(服务质量)
    DPDK LPM路由存储与查找
    《教父》曾说
  • 原文地址:https://www.cnblogs.com/asdaa/p/11337685.html
Copyright © 2011-2022 走看看