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()函数。

四、运行结果:

相关推荐
SilentSamsara7 分钟前
SQLAlchemy 2.x:异步 ORM 与数据库迁移 Alembic 完整指南
开发语言·数据库·python·sql·青少年编程·oracle·fastapi
27669582929 分钟前
京东随机变速滑块拼图验证码识别(京东E卡)
java·服务器·前端·python·京东滑块·京东变速滑块·京东e卡绑卡
basketball61613 分钟前
C++ static_cast 完全解析
开发语言·c++
weixin_4684668519 分钟前
支持向量机新手实战指南
人工智能·python·算法·机器学习·支持向量机
子安柠22 分钟前
Go语言并发编程:协程与管道详解
开发语言·后端·golang
程序大视界26 分钟前
【Python系列课程】Python面向对象(下):封装、继承与多态
开发语言·python
夕小瑶27 分钟前
Claude Code 保姆级上手教程(2026 版)
人工智能·python
Lumbrologist28 分钟前
【C++】零基础入门 · 第 12 节:模板与 STL 入门
开发语言·c++
天月风沙37 分钟前
基于机器视觉的实验室器件仓储系统设计——内蒙古自治区国家级大创工程存档
开发语言·python
24zhgjx-fuhao38 分钟前
虚链路的配置
开发语言·网络·php