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

四、运行结果:

相关推荐
wdfk_prog14 分钟前
嵌入式面试真题第 13 题:单硬件 Timer 下的高精度多路软件定时器架构设计
c语言·开发语言·面试·职场和发展·嵌入式
oort12327 分钟前
吃上了自家的细糠,还挺丝滑,用起来手感还行,OortCloud发布新版AI编程平台,下载 OortCodex,Token多,免费薅
大数据·开发语言·人工智能·ai编程
slandarer40 分钟前
MATLAB | 泰勒图绘制,支持各种角度范围
开发语言·数学建模·matlab·nature·顶刊·泰勒图
元Y亨H1 小时前
Pandas 解析 Excel 导致的内存溢出(MemoryError)
python·excel
mct1231 小时前
c++ iconv 字符utf-8转换gb2312失败
开发语言·c++
金銀銅鐵2 小时前
[Python] 用 turtle 来绘制瑞典国旗
python
Albert Edison2 小时前
【GUI 自动化测试】Pywinauto 常见操作
自动化测试·python·pywinauto
海兰2 小时前
【高速缓存】RedisVL为文本生成嵌入向量实践指南
人工智能·python·机器学习
2601_955760072 小时前
如何用 Claude Opus 5 API 批量扩展长尾关键词和文章选题
前端·python·搜索引擎
艾斯特_2 小时前
从模型调用到可用聊天应用:会话状态与消息协议
python·ai·aigc