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

四、运行结果:

相关推荐
上海合宙LuatOS5 分钟前
LuatOS扩展库API——【exremotecam】网络摄像头控制
开发语言·网络·物联网·lua·luatos
好运的阿财8 分钟前
大模型热切换功能完整实现指南
人工智能·python·程序人生·开源·ai编程
feng_you_ying_li10 分钟前
C++11,{}的初始化情况与左右值及其引用
开发语言·数据结构·c++
爱码小白14 分钟前
数据库多表命名的通用规范
数据库·python·mysql
xiaotao13117 分钟前
JS new 操作符完整执行过程
开发语言·前端·javascript·原型模式
TE-茶叶蛋21 分钟前
结合登录页-PHP基础知识点解析
android·开发语言·php
无巧不成书021821 分钟前
Java包(package)全解:从定义、使用到避坑,新手零基础入门到实战
java·开发语言·package·java包
大喵桑丶22 分钟前
ZABBIX7二次开发AI监控数据调取杂记
大数据·人工智能·python
WangJunXiang637 分钟前
Python网络编程
开发语言·网络·python
guhy fighting39 分钟前
new Map,Array.from,Object.entries的作用以及使用方法
开发语言·前端·javascript