互斥锁理论
'''
多个线程同时要修改同一份数据,类似抢票等,
都需要用到互斥锁 虽然影响效率,但保证数据安全
'''
import json
from multiprocessing import Process, Lock
import multiprocessing
import time
import os
import random
def search(i):
with open('火车票.txt', 'r', encoding='utf8') as f:
dic = json.load(f)
print(f'用户:{i},查询票数:{dic.get("ticket_num")}')
def buy(i):
with open('火车票.txt', 'r', encoding='utf8') as f:
dic = json.load(f)
time.sleep(random.randint(1, 3))
if dic.get('ticket_num') > 0:
dic['ticket_num'] -= 1
with open('火车票.txt', 'w', encoding='utf8') as f:
json.dump(dic, f)
print(f'用户:{i}购票成功')
else:
print(f'用户:{i}购票失败')
def run(i, mutex):
search(i)
mutex.acquire()
buy(i)
mutex.release()
if __name__ == '__main__':
multiprocessing.set_start_method('fork')
mutex = Lock()
for i in range(1, 10):
p = Process(target=run, args=(i, mutex,))
p.start()
'''
多个进程 操作同一份数据的时候,会出现数据错乱的问题
针对上述问题,解决方式就是加锁处理
加锁可以将并发编程串行,牺牲了效率,保证了数据安全
'''
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了