linux 多线程信号量(盘子水果问题)

使用信号量机制解决家庭吃水果问题。 桌上有一个可以容纳3个水果的盘子,每次只能放或取一个水果,爸爸负责削苹果,妈妈负责剥桔子,儿子只吃苹果,女儿只吃橘子。使用信号量机制来解决。设置一个empty变量表示盘中还有几个空位置,然后设置apple和orange记录盘中苹果和橘子的数量。运行结果:源代码:#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <p 阅读详情
  • 桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。
#include <stdlib.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <semaphore.h>

typedef struct{
    int     frt_tp;
    sem_t   sem_product;
    sem_t   sem_space;
    pthread_mutex_t mutex;
}frt_sem_mtx_def;


/*  父亲线程:盘子中为空,则随机添加水果
    frt_tp值为1-橘子,2-苹果
    对frt_tp进行资源加锁,更改后,释放锁
*/
void* fun_father(void* arg)
{
    frt_sem_mtx_def *frt = (frt_sem_mtx_def*)arg;
    int cnt = 0;
    while (1)
    {
        sem_wait(&frt->sem_space);
        sem_post(&frt->sem_product);

        sem_getvalue(&frt->sem_product, &cnt);
        pthread_mutex_lock(&frt->mutex);
        frt->frt_tp = rand()%2+1;
        pthread_mutex_unlock(&frt->mutex);
        printf("father Thread 0x%lx put %d fruit, count:%d\n", pthread_self(), frt->frt_tp, cnt);

        sleep(1);
    }
}

/*  儿子线程:加锁访问frt_tp值
    若值是1,则对盘子中水果减一,对盘子空间加一
    重置frt_tp为0,最后释放锁
*/
void* fun_son(void* arg)
{
    frt_sem_mtx_def *frt = (frt_sem_mtx_def*)arg;

    int p_cnt = 0;
    int s_cnt = 0;
    
    while (1)
    {
        pthread_mutex_lock(&frt->mutex);
        if (frt->frt_tp == 1)
        {
            //对产品个数减一
            sem_wait(&frt->sem_product);
            //相应的空间加一
            sem_post(&frt->sem_space);
            sem_getvalue(&frt->sem_product, &p_cnt);
            sem_getvalue(&frt->sem_space, &s_cnt);

            printf("Son Thread 0x%lx take %d fruit, p_cnt:%d, s_cnt:%d\n", pthread_self(),frt->frt_tp, p_cnt, s_cnt);
            frt->frt_tp = 0;
        }
        pthread_mutex_unlock(&frt->mutex);
        sleep(1);
    }
    return (void*)0;
}

/*  女儿线程:加锁访问frt_tp值
    若值是2,则对盘子中水果减一,对盘子空间加一
    重置frt_tp为0,最后释放锁
*/
void* fun_dau(void* arg)
{
    int p_cnt = 0;
    int s_cnt = 0;
    frt_sem_mtx_def *frt = (frt_sem_mtx_def*)arg;

    while (1)
    {
        pthread_mutex_lock(&frt->mutex);
        if (frt->frt_tp == 2)
        {
            //对产品个数减一
            sem_wait(&frt->sem_product);
            //相应的空间加一
            sem_post(&frt->sem_space);
            sem_getvalue(&frt->sem_product, &p_cnt);
            sem_getvalue(&frt->sem_space, &s_cnt);

            printf("dau Thread 0x%lx take %d fruit, p_cnt:%d, s_cnt:%d\n", pthread_self(), frt->frt_tp, p_cnt, s_cnt);
            frt->frt_tp = 0;
        }

        pthread_mutex_unlock(&frt->mutex);
        sleep(1);

    }

    return (void*)0;
}

int main()
{
    pthread_t id1, id2, id3;
    frt_sem_mtx_def frt;
    frt.frt_tp = 0;
    // 初始化信号量
    sem_init(&frt.sem_product, 0, 0); // 初始状态水果为0
    sem_init(&frt.sem_space, 0, 1);   // 空间设置一个
    pthread_mutex_init(&frt.mutex, NULL);

    pthread_create(&id1, NULL, fun_father, (void*)&frt);
    pthread_create(&id2, NULL, fun_son, (void*)&frt);
    pthread_create(&id3, NULL, fun_dau, (void*)&frt);

    pthread_join(id1, NULL);
    pthread_join(id2, NULL);
    pthread_join(id3, NULL);

    return 0;
}

运行结果如下:
father Thread 0xb75bfb40 put 2 fruit, count:1
dau Thread 0xb65bdb40 take 2 fruit, p_cnt:0, s_cnt:1
father Thread 0xb75bfb40 put 1 fruit, count:1
Son Thread 0xb6dbeb40 take 1 fruit, p_cnt:0, s_cnt:1
father Thread 0xb75bfb40 put 2 fruit, count:1
dau Thread 0xb65bdb40 take 2 fruit, p_cnt:0, s_cnt:1
father Thread 0xb75bfb40 put 2 fruit, count:1
dau Thread 0xb65bdb40 take 2 fruit, p_cnt:0, s_cnt:1
father Thread 0xb75bfb40 put 2 fruit, count:1
dau Thread 0xb65bdb40 take 2 fruit, p_cnt:0, s_cnt:1
father Thread 0xb75bfb40 put 2 fruit, count:1
dau Thread 0xb65bdb40 take 2 fruit, p_cnt:0, s_cnt:1
father Thread 0xb75bfb40 put 1 fruit, count:1
Son Thread 0xb6dbeb40 take 1 fruit, p_cnt:0, s_cnt:1
father Thread 0xb75bfb40 put 1 fruit, count:1
Son Thread 0xb6dbeb40 take 1 fruit, p_cnt:0, s_cnt:1
father Thread 0xb75bfb40 put 2 fruit, count:1
dau Thread 0xb65bdb40 take 2 fruit, p_cnt:0, s_cnt:1
father Thread 0xb75bfb40 put 2 fruit, count:1
dau Thread 0xb65bdb40 take 2 fruit, p_cnt:0, s_cnt:1

使用到信号量就可以达到这种效果,可以不需要使用到互斥锁

#include <stdlib.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <semaphore.h>

typedef struct{
    int     frt_tp;
    sem_t   sem_product;
    sem_t   sem_space;
}frt_sem_mtx_def;


/*  父亲线程:盘子中为空,则随机添加水果
    frt_tp值为1-橘子,2-苹果
    对frt_tp进行资源加锁,更改后,释放锁
*/
void* fun_father(void* arg)
{
    frt_sem_mtx_def *frt = (frt_sem_mtx_def*)arg;
    while (1)
    {
        sem_wait(&frt->sem_space);
        frt->frt_tp = rand()%2+1;
        printf("father Thread 0x%lx put %d fruit\n", pthread_self(), frt->frt_tp);
        sem_post(&frt->sem_product);
        sleep(1);
    }
}

/*  儿子线程:加锁访问frt_tp值
    若值是1,则对盘子中水果减一,对盘子空间加一
    重置frt_tp为0,最后释放锁
*/
void* fun_son(void* arg)
{
    frt_sem_mtx_def *frt = (frt_sem_mtx_def*)arg;

    int p_cnt = 0;
    int s_cnt = 0;
    
    while (1)
    {
        if (frt->frt_tp == 1)
        {
            //对产品个数减一
            sem_wait(&frt->sem_product);
            printf("Son Thread 0x%lx take %d fruit\n", pthread_self(),frt->frt_tp);
            frt->frt_tp = 0;
            //相应的空间加一
            sem_post(&frt->sem_space);
        }
        sleep(1);
    }
    return (void*)0;
}

/*  女儿线程:加锁访问frt_tp值
    若值是2,则对盘子中水果减一,对盘子空间加一
    重置frt_tp为0,最后释放锁
*/
void* fun_dau(void* arg)
{
    int p_cnt = 0;
    int s_cnt = 0;
    frt_sem_mtx_def *frt = (frt_sem_mtx_def*)arg;

    while (1)
    {
        if (frt->frt_tp == 2)
        {
            //对产品个数减一
            sem_wait(&frt->sem_product);
            printf("dau Thread 0x%lx take %d fruit\n", pthread_self(), frt->frt_tp);
            frt->frt_tp = 0;
            //相应的空间加一
            sem_post(&frt->sem_space);
        }

        sleep(1);

    }

    return (void*)0;
}

int main()
{
    pthread_t id1, id2, id3;
    frt_sem_mtx_def frt;
    frt.frt_tp = 0;
    // 初始化信号量
    sem_init(&frt.sem_product, 0, 0); // 初始状态水果为0
    sem_init(&frt.sem_space, 0, 1);   // 空间设置一个

    pthread_create(&id1, NULL, fun_father, (void*)&frt);
    pthread_create(&id2, NULL, fun_son, (void*)&frt);
    pthread_create(&id3, NULL, fun_dau, (void*)&frt);

    pthread_join(id1, NULL);
    pthread_join(id2, NULL);
    pthread_join(id3, NULL);

    return 0;
}


father Thread 0xb7510b40 put 2 fruit
dau Thread 0xb650eb40 take 2 fruit
father Thread 0xb7510b40 put 1 fruit
Son Thread 0xb6d0fb40 take 1 fruit
father Thread 0xb7510b40 put 2 fruit
dau Thread 0xb650eb40 take 2 fruit
father Thread 0xb7510b40 put 2 fruit
dau Thread 0xb650eb40 take 2 fruit
father Thread 0xb7510b40 put 2 fruit
dau Thread 0xb650eb40 take 2 fruit
father Thread 0xb7510b40 put 2 fruit
dau Thread 0xb650eb40 take 2 fruit
father Thread 0xb7510b40 put 1 fruit
Son Thread 0xb6d0fb40 take 1 fruit
father Thread 0xb7510b40 put 1 fruit
Son Thread 0xb6d0fb40 take 1 fruit
father Thread 0xb7510b40 put 2 fruit
dau Thread 0xb650eb40 take 2 fruit
father Thread 0xb7510b40 put 2 fruit
dau Thread 0xb650eb40 take 2 fruit
father Thread 0xb7510b40 put 1 fruit
Son Thread 0xb6d0fb40 take 1 fruit

linux多线程编程_吃水果问题 立即下载

相关推荐

linuxc语言信号量爸爸女儿儿子橘子苹果问题资源共享

linux系统c语言实现爸爸儿子女儿简单消费者问题苹果橘子拿与放问题, 资源共享,线程互斥,使用简单的无名信号量解决

PV操作每日一题-橘子苹果问题(高阶版变式)

昨天的高阶版还是有挑战,今天一起看个它的变式好啦。

liangsena的博客 1594

操作系统:生产者和消费者之吃水果问题

爸爸、儿子、女儿共用一个盘子,盘中一次只能放一个水果。当盘子为空时,爸爸可将一个水果放入果盘中。若放入果盘中的是桔子,则允许儿子吃,女儿必须等待;若放入果盘中的是苹果,则允许女儿吃,儿子必须等待。本题实际上是生产者-消费者问题的一种变形。这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。

多线程练习----吃水果问题

n问题描述:桌上有一只盘子,每次只能放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘里的桔子,女儿专等吃盘里的苹果。只要盘子空,则爸爸或妈妈可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出,请给出四人之间的同步关系,并用PV操作实现四人正确活动的程序。 解:四人之间的关系:1爸爸,妈妈要互斥使用盘子,所以两者之间是互斥关系;2爸爸放的苹果,女儿吃,所以两者是同...

yanlijun250 1695

吃放水果 java(多线程)

吃放水果的gui开发,适合 java初学者(多线程)

有关水果问题的信号量程序

爸爸放苹果,妈妈放橘子,盘子只能容纳两个水果。儿子只吃苹果,女儿只吃橘子。用信号量控制

多线程_吃水果问题

n问题描述:桌上有一只盘子,每次只能放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘里的桔子,女儿专等吃盘里的苹果。只要盘子空,则爸爸或妈妈可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出,请给出四人之间的同步关系,并用PV操作实现四人正确活动的程序。  解:四人之间的关系:1爸爸,妈妈要互斥使用盘子,所以两者之间是互斥关系;2爸爸放的苹果,女儿吃,所

xieshren的专栏 2698

台式机ubuntu系统屏幕无法调节的问题(已解决)(汇总)

背景:新配了一台主机,安装了双系统,windows下屏幕在带鱼屏上显示良好,但Ubuntu系统屏幕拉伸严重。 问题描述:系统没有适应屏幕被整个拉伸了,进入设置界面,显示Built-in Display,分辨率只有1024*768无法设置。 尝试一:网上最多的方法就是使用xrandr, 结果显示:xrandr:Failed to get size of gamma for output default 尝试二: 第一次进入命令行页面:login:填你的用户面 password:使用字母上方的数字键输入你的密码

weixin_45626706的博客 4625

在虚拟机中完成PV操作验证实验

本实验通过PV操作实现经典的生产者-消费者问题变体。实验设计了一个盘子作为共享资源(容量为1),父亲和母亲作为生产者分别放入苹果和橘子,女儿和儿子作为消费者分别取用对应水果。使用信号量empty控制盘子空间,mutex实现互斥访问,apple/orange信号量协调生产者消费者。实验在Linux环境下用多线程编程实现,通过sem_wait/sem_post模拟PV操作。后续改进将盘子容量扩展为3,并增加小猫小狗两个消费者角色,通过引入互斥锁mutex确保多消费者场景下的线程安全。实验结果表明该方案能有效实现

m0_62325091的博客 1160

Unity URP管线下的Highlight Plus插件,从导入到实现物体高亮的保姆级避坑指南

本文详细解析了在Unity URP管线中使用Highlight Plus插件实现物体高亮的完整流程与常见问题解决方案。从URP环境配置、插件导入避坑到相机设置优化,提供了一套完整的保姆级指南,帮助开发者高效解决高亮效果不显示等典型问题,并包含移动端性能优化与复杂场景管理的高级技巧。

weixin_27379781的博客 408

TS808效果器制作教程

TS808效果器制作教程 可以在立创商城购买到大部分的电阻电容和IC,音频接口,踩钉,电位器和电源接口可以去某宝看看都买得到的。链接https//pan.baidu.com/s/1QId1eIE3fJ2u5NLBSISvGA。安装过程过于繁琐,把所有元器件按照图纸焊接完成就可以调试了,祝你们成功!这是TS808经典效果器制作过程的记录。IC是JRC4558。...

qq_18948149的博客 3427

Linux编程-多线程实现一家人吃水果问题(C语言)

一家人吃水果问题(多线程) 一家人吃水果问题是生产者消费者问题的一种变形。问题如下: 桌子上有一只盘子,每次只能放一个水果; 爸爸专向里面放苹果,妈妈专放桔子; 儿子专吃苹果,女儿专吃桔子; 仅当盘子空闲时,爸爸妈妈才可以向里面放水果; 仅当盘子里有自己需要的水果时,儿子女儿才可以从里面取出一只水果。 试利用线程模拟这个问题,并进行正确的同步。 #include<stdio.h> #include<stdlib.h> #include<pthread.h> #incl

Emory的博客 5967

自适应动态规划硕士博士论文学习

强化学习关注随机过程中的序贯决策问题,而自适应动态规划关注动态系统的控制问题。吸引域:系统渐近稳定的区域。

DarlingLSA的博客 1425

【操作系统】进程同步问题

1、桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。 ​​Semaphore S=1,Sa=0,So=0; Main() { cobegin Father(); Son(); Daughter(); Coend

Q171360223的博客 1023

EMI硬件抑制八项工程对策:从回路面积到谐振规避

电磁干扰(EMI)是电子系统可靠性与EMC合规性的核心挑战,其本质源于高频电流回路产生的辐射与耦合效应。理解回路面积、共模/差模噪声、阻抗匹配等基础原理,是实施有效抑制的前提。技术价值体现在降低辐射发射(RE)、传导发射(CE)超标风险,提升产品一次通过率与长期稳定性。典型应用场景包括开关电源设计、高速数字接口布局、工业嵌入式设备及医疗电子等对EMC要求严苛的领域。本文聚焦可落地的硬件级对策,涵盖回路面积控制、屏蔽策略、变压器漏磁管理、双线传输与阻抗匹配等关键实践,深度融合电流回路物理模型与PCB工程实现。

weixin_35019679的博客 85

DRAM知识整理系列(三):部分时序参数整理

一、tCL-tRCD-tRP-tRAS(第一时序) 内存是根据行和列寻址的,当请求触发后,最初是tRAS(Active to precharge Delay),预充电后,内存才真正开始初始化RAS(Row Address Strobe)。一旦tRAS激活后,RAS开始进行需要数据的寻址。首先是行地址,然后初始化tRCD(RAS to CAS Delay),周期结束,接着通过CAS(Column Address Strobe)访问所需数据的十六进制地址。其中,从CAS开始到CAS结束,就是CAS延迟(即t

不吃鱼的猫的博客 7万+

LINUX——多线程编程

【代码】LINUX——多线程编程。

weixin_64207326的博客 174

使用Python实现深度学习模型:智能光污染监测与管理

本项目将通过以下几个步骤实现智能光污染监测:收集光污染图像数据数据预处理构建深度学习模型训练模型评估模型部署模型用于实时监测通过本文介绍的步骤,我们实现了一个使用Python和深度学习技术的智能光污染监测与管理系统。该系统能够自动识别光污染源,为相关管理部门提供科学依据,以便更好地规划和管理城市照明。同时,这一方法还可以扩展到其他环境监测领域,为环境保护贡献力量。

Echo_Wish 593

低功耗策略实战:如何平衡省电收益与系统稳定性风险

低功耗设计是嵌入式系统与电池供电产品的核心命题,其本质并非单纯追求瞬时电流最低,而是通过管理平均电流来延长续航、降低发热、提升器件寿命并优化整机成本。从基础概念出发,休眠模式、唤醒源配置、时钟源选择与外设状态恢复共同构成了一套系统工程,而分级休眠策略与分阶段功耗测量则是控制风险的关键手段。实际项目中,唤醒间隔的计算、供电电压的取舍及兜底机制的设计,直接影响着设备在真实场景下的可靠性与续航表现。无论是物联网节点、可穿戴硬件还是工业监测终端,都需要在性能折损与功耗收益之间找到平衡点。本文以工程实践为视角,梳理低

weixin_33947521的博客 722

100天精通Oracle-实战系列(第33天)RHEL 7 安装 Oracle 12CR2 RAC 数据库

100天精通Oracle-实战系列(第33天)RHEL 7 安装 Oracle 12CR2 RAC 数据库

LuciferLiu_DBA 3451

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

python操作系统课程设计_操作系统课程设计.pdf

计算机科学与通信工程学院操作系统课程设计报告题目:linux系统下实现PV 操作班级: 软件工程1401姓名: 吴帅帅学号: 3140608020指导老师: 牛德姣2016 年12 月27目录一、 实验题目 1二、 实验目的和要求 2三...

weixin_39997300的博客 345

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Linux讲解 生产者消费者模型

     我们上次通过代码实现了进程间的互斥操作,解决了wps和word同时都去操作我们的队列的话怎么解决这个问题,但是打印机这边又出现了问题,因为我们的进程队列是有限制的,正常来说打印机就在我们的槽里获取数据打印就可以了,但是如果说我们槽满了,这时候应该怎么办?Wps和word是不是都要等着队列空了再往里边放,再或者如果说队列全部空了,打印机也要等着其他进程往里边放东西,所以wps、word和打...

Hanani_Jia的博客 645

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Shell脚本高效解析INI配置:sed/awk/纯Bash实战指南

配置文件解析是运维自动化脚本中的常见需求,INI格式凭借结构简单、易于阅读,在服务器环境中被广泛使用。Shell脚本处理配置时,常见做法包括用sed/grep定向提取、awk结构化解析以及纯Bash实现无依赖读取器。解析的核心在于正确处理节、键、值、注释等元素,同时避免特殊字符引起误匹配和安全隐患。掌握这些技术能够提升部署脚本、运维工具在多种环境下的可移植性和稳定性。针对值中包含等号、井号等边界情况,选择合适的解析策略尤为重要。本文结合实际踩坑经验,系统梳理不同方案选型与实现细节,为在Shell环境下安全高

weixin_33971977的博客 632

操作系统实验—进程同步(吃水果问题)

题目 桌上有一空盘,最多允许存放一只水果。爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果。 试用P、V操作实现爸爸、儿子、女儿三个并发进程的同步。 提示:设置一个信号量表示可否向盘中放水果,一个信号量表示可否取桔子,一个信号量表示可否取苹果。 实验目的: 深入掌握进程、线程同步机制——信号量机制的原理与应用; 掌握Windows编程中信号量机制的使用方法; 掌握Windows下线程的控制方法; 可进行简单的信号量应用编程。 解题思路 下面展示一些 内联代码片。 从这个题意可以得出,

m0_56145255的博客 1万+

信号量 吃水果问题

操作系统吃水果问题模拟程序前言题目题目解析代码解释代码实现代码运行结果 前言 参考代码 声名:主要根据这篇文章的思路,在其基础上增加了信号量机制。 题目 有一个盘子,可以放5个水果(苹果or桔子)。父亲每次向盘子随机放入一个水果(苹果 or桔子)父亲放入水果的次数不少于11次。儿子只吃桔子,女儿只吃苹果。请编程使用信号量机制模拟解决此进程同步问题。打印信息包括盘子的情况、调度的情况以及父亲、儿子或者女儿执行的操作。 题目解析 有题目可以得知父亲是生产者,儿子与女儿是消费者,其中,父亲随机在盘子中

Zheng_LH 2700

信号量实现同步之苹果橘子问题

游戏规则: 桌子上有一个盘子,盘子中可以放置的水果数量一定,妈妈可以一次放入一个橙子,爸爸可以一次放入一个苹果,儿子一次吃一个苹果,女儿一次吃一个橙子。 利用信号量来实现这一过程,使得四个人可以有条不紊的进行优秀。 // // apple_orange.c // // // Created by YIN on 2021/5/24. // #include "apple_orange.h" #include "stdio.h" #include "pthread.h" #include "s

qq_38323297的博客 2059
上一篇: linux 多线程信号量(生产者消费者问题)
下一篇: linux 消息队列实例
最后冰吻free
博客等级 码龄12年 121粉丝 371原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值