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

四、运行结果:

相关推荐
aini_lovee5 分钟前
C#与倍福PLC(通过ADS协议)通信上位机源程序实现
开发语言·c#
dFObBIMmai6 分钟前
SQL复杂数据聚合_嵌套子查询与GROUP BY配合
jvm·数据库·python
fie88899 分钟前
基于 MATLAB 的前景背景分割系统
开发语言·matlab
小许同学记录成长17 分钟前
基于幅度形态与参数聚类的工作模式判别
python·算法·scikit-learn
郝学胜-神的一滴19 分钟前
Qt 入门 01-02: 开发环境搭建指南
开发语言·c++·qt·客户端
dinglu1030DL23 分钟前
CSS Grid布局如何实现网格项目排序_使用order属性改变显示顺序
jvm·数据库·python
财经资讯数据_灵砚智能28 分钟前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年5月13日
大数据·人工智能·python·信息可视化·自然语言处理
m0_4708576428 分钟前
c++怎么利用C++17的filesystem--copy实现高效文件夹克隆【详解】
jvm·数据库·python
duke86926721429 分钟前
HTML怎么区分正文与广告_HTML aside与广告位语义【技巧】
jvm·数据库·python
咕噜咕噜啦啦32 分钟前
RTX5090配置DGL
pytorch·python·conda·pip