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

四、运行结果:

相关推荐
甄心爱学习18 分钟前
【项目实训(个人11)】
python·个人开发
覆东流23 分钟前
Java开发环境搭建
java·开发语言·后端
阿洛学长27 分钟前
VMware安装虚拟机教程(超详细)
java·linux·开发语言
zhangfeng113327 分钟前
国家超算中心 htc 如果只有gpu资源 没有cpu资源 操作文件的时候会不会很卡呢
人工智能·pytorch·python·机器学习
rit843249927 分钟前
链路预测(Link Prediction)MATLAB 实现
开发语言·matlab
jiayong2328 分钟前
01 检查 Python 版本与环境
开发语言·python
阿哟阿哟37 分钟前
vna.3.1.9.cn.jar设置成中文界面
python·pycharm·jar
XZ-07000140 分钟前
MySQL-综合应用(Python+Html)
python·mysql·html
就叫_这个吧42 分钟前
Java普通类、抽象类、接口的应用和区别
java·开发语言
梅孔立1 小时前
解决Nginx缓存不写入响应体问题:浏览器强制不缓存配置教程
java·开发语言·nginx·spring