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

四、运行结果:

相关推荐
red1giant_star2 分钟前
浅析文件类漏洞原理与分类——含payload合集与检测与防护思路
python·安全
tryCbest10 分钟前
Python之Flask开发框架(第一篇) — 从安装到第一个应用
开发语言·python·flask
q54314708712 分钟前
Java进阶总结——集合
java·开发语言
啥咕啦呛14 分钟前
java打卡学习5:java基础学习
java·开发语言·学习
zhangzeyuaaa17 分钟前
Python getter/setter 正确用法详解
开发语言·python
源码之家24 分钟前
计算机毕业设计:Python智慧交通大数据分析平台 Flask框架 requests爬虫 出行速度预测 拥堵预测(建议收藏)✅
大数据·hadoop·爬虫·python·数据分析·flask·课程设计
南境十里·墨染春水25 分钟前
C++ 笔记 深赋值 浅赋值(面向对象)
开发语言·jvm·c++·笔记
Shaoxi Zhang30 分钟前
pm2运行项目实践记录(通过ecosystem.config.js配置并自动运行)
javascript·python·pycharm
华科大胡子31 分钟前
开发者的临时文件自动化工具
python
Mr_Xuhhh33 分钟前
算法题解合集:回文子串、不相邻取数、空调遥控
python