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

四、运行结果:

相关推荐
我是菜鸟0713号5 分钟前
Qt + Python 算法集成的一种低耦合实践:FastAPI 服务化方案
python·qt·fastapi
我是一只小青蛙8887 分钟前
TraeCNIDE Python开发全流程指南
python
欣然~13 分钟前
法律案例 PDF 批量转 TXT 工具代码
linux·前端·python
少林码僧18 分钟前
2.30 传统行业预测神器:为什么GBDT系列算法在企业中最受欢迎
开发语言·人工智能·算法·机器学习·ai·数据分析
CoderCodingNo23 分钟前
【GESP】C++六级考试大纲知识点梳理, (7) 栈与队列
开发语言·c++
edisao28 分钟前
六、 读者高频疑问解答 & 架构价值延伸
大数据·开发语言·人工智能·科技·架构·php
范纹杉想快点毕业31 分钟前
C语言实现埃拉托斯特尼筛法
c语言·开发语言
季布,36 分钟前
本地Windows测试:钉钉群消息/文件传输到Python服务(完整教程)
windows·python·钉钉
catchadmin37 分钟前
Laravel12 + Vue3 的免费可商用 PHP 管理后台 CatchAdmin V5.1.0 发布 新增 AI AGENTS 配置
开发语言·php
zm-v-1593043398643 分钟前
最新AI-Python自然科学领域机器学习与深度学习技术
人工智能·python·机器学习