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

四、运行结果:

相关推荐
海边的Kurisu13 分钟前
Mybatis-Plus | 只做增强不做改变——为简化开发而生
java·开发语言·mybatis
浅念-20 分钟前
C++ 模板进阶
开发语言·数据结构·c++·经验分享·笔记·学习·模版
芝士爱知识a29 分钟前
【FinTech前沿】重塑衍生品交易:十维深度解析 AlphaGBM 智能期权分析平台
人工智能·python·量化交易·期权分析·alphagbm·期权交易·ai期权
小白菜又菜1 小时前
Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
python·算法·leetcode
Omigeq1 小时前
1.2.2 - 采样搜索算法(以RRT和RRT*为例) - Python运动规划库教程(Python Motion Planning)
开发语言·人工智能·python·机器人
凌云拓界1 小时前
TypeWell全攻略(二):热力图渲染引擎,让键盘发光
前端·后端·python·计算机外设·交互·pyqt·数据可视化
小白菜又菜1 小时前
Leetcode 234. Palindrome Linked List
python·算法·leetcode
恒云客1 小时前
python uv debug launch.json
数据库·python·json
Katecat996631 小时前
YOLO11-SEG-AFPN-P345改进采血装置检测与识别系统
python
m0_531237172 小时前
C语言-操作符进阶
c语言·开发语言