Python多线程与互斥锁模拟抢购余票的示例

一、示例代码:

python 复制代码
from threading import Thread
from threading import Lock
import time

n = 100                                    # 共100张票


def task():
    global n
    mutex.acquire()                         # 上锁
    temp = n
    time.sleep(0.1)
    n = temp - 1
    print('购票成功,剩余%d张余票!' % n)
    mutex.release()                         # 释放锁


if __name__ == '__main__':
    mutex = Lock()                          # 实例化Lock类
    thread_list = []                        # 初始化列表
    for i in range(100):
        t = Thread(target=task)             # 实例化线程类
        thread_list.append(t)               # 线程实例加入列表
        t.start()                           # 创建线程
    for t in thread_list:
        t.join()                            # 等待子线程结束

二、方法注释

threading模块中使用Lock类方便的处理锁定。Lock类的两个方法:acquire()上锁与release()释放锁。

三、代码说明:

创建100个线程,全部执行task函数,为解决资源竞争问题,使用mutex.acquire()方法实现资源的锁定,第一个获取资源的线程锁定后,其他线程等待mutex.release()解锁释放资源。所以每次只有一个线程执行task()函数。

四、运行结果:

相关推荐
for_ever_love__7 分钟前
python基础语法学习: requirements.txt
开发语言·python·学习
程序员清风9 分钟前
FastAPI 入门:用 Python 快速开发现代后端服务
python·oracle·fastapi
XiaoYu1__18 分钟前
JavaGUI文件管理系统开发实战:从静态展示到动态交互的演进
java·开发语言
SunnyDays101118 分钟前
使用 Python 提取 Word 文档中的表格数据
python·word
for_ever_love__20 分钟前
python基础语法学习: 动态类型
开发语言·python·学习
霸道流氓气质27 分钟前
MCP(Model Context Protocol)核心概念与Java SDK集成
java·开发语言
企查查数据服务28 分钟前
全军禁入下客商准入风控,关联图谱与穿透核查
大数据·开发语言·数据库·php
troy1281 小时前
分布式系统框架选型指南:主流框架优缺点深度对比
python·django·pygame
PC2005-cloud1 小时前
DSH 白嫖指南:接入 Command Code Go、WorkBuddy 与 Trae 的免费额度
开发语言·后端·golang
129Lab1 小时前
BMS算法快速原型开发:AI辅助实现扩展卡尔曼滤波(EKF)SOC估算从理论到代码落地
python·嵌入式开发·bms·卡尔曼滤波·电池管理系统·soc估算