线程锁模拟抢票系统
from multiprocessing import Process,Lock import json,random,time,os def search(): #查票 with open("db.txt",encoding='utf-8') as f: dic=json.load(f) print("%s 剩余票数 %s" %(os.getpid(),dic['count'])) def get(): #抢票 with open("db.txt",encoding='utf-8') as read_f: dic = json.load(read_f) if dic['count'] > 0: dic['count'] -=1 time.sleep(random.randint(1,3)) #模拟手速+网速 with open("db.txt",'w', encoding='utf-8') as write_f: json.dump(dic,write_f) print("\033[43;1m%s抢票成功\033[0m "%os.getpid()) def task(lock): search() #查找可能是并发执行, lock.acquire() #抢票才要锁,这也是用join的另一个不同 get() lock.release() if __name__ == "__main__": lock = Lock() for i in range(20): p = Process(target=task,args=(lock,)) p.start() #锁和join都是把并发变为串行,但是锁比join灵活,lock能让局部串行,而lock只能让全局串行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理