当前位置: 首页 > news >正文

IO--多线程(条件变量)

 题目:

 实现主线程每隔一秒随机生产3个苹果或两个橘子;

线程一消费5个苹果;

线程二消费7个橘子;

 提示:

        int rand(void);

        功能:获得随机数。

        返回值:一个随机数;

 代码实现:

#include <myhead.h>
int Orange=0;
int Apple=0;pthread_cond_t condition_apple;
pthread_cond_t condition_orange;pthread_mutex_t mutex;void* eat_5_apple_task(void* arg){while(1){pthread_mutex_lock(&mutex);pthread_cond_wait(&condition_apple,&mutex);Apple-=5;printf("1号消费5个苹果,剩余苹果数:%d\n",Apple);pthread_mutex_unlock(&mutex);}
};void* eat_7_orange_task(void* arg){while(1){pthread_mutex_lock(&mutex);pthread_cond_wait(&condition_orange,&mutex);Orange-=7;printf("1号消费7个橘子,剩余橘子数:%d\n",Orange);pthread_mutex_unlock(&mutex);}
};
int main(int argc, const char *argv[])
{pthread_mutex_init(&mutex,NULL);pthread_cond_init(&condition_apple,NULL);pthread_cond_init(&condition_orange,NULL);pthread_t eat_5_apple_task_id;pthread_t eat_7_orange_task_id;pthread_create(&eat_5_apple_task_id,NULL,eat_5_apple_task,NULL);pthread_create(&eat_7_orange_task_id,NULL,eat_7_orange_task,NULL);while(1){int num=rand();pthread_mutex_lock(&mutex);if(num%2==0){Apple+=2;}else{Orange+=3;}printf("Apple:%d,\tOrange:%d\n",Apple,Orange);if(Apple>5){pthread_cond_signal(&condition_apple);}if(Orange>7){pthread_cond_signal(&condition_orange);}pthread_mutex_unlock(&mutex);sleep(1);}return 0;
}

 现象展示:

 


http://www.mrgr.cn/news/60487.html

相关文章:

  • 十八、行为型(状态模式)
  • vLLM推理部署Qwen2.5
  • AMD XILINX 20nm器件价格上调25%
  • 模型体素化
  • 什么是大数据?一文讲清大数据的概念、演进、趋势、产业链及关键技术!
  • 图---java---黑马
  • 小白如何成为编程高手?
  • 云渲染怎么实现网络连接的方法?一文解析
  • ssm005基于SSM框架的购物商城系统的开发与实现(论文+源码)_kaic
  • 雷池社区版OPEN API使用教程
  • WebRTC VAD 详解与代码示例
  • 雷池社区版中升级雷池遇到问题
  • 【云原生】云原生与DevOps的结合:提升软件开发与交付的效率
  • nacos安装与配置
  • 全网最简单的Java设计模式【九】原型模式深入解析
  • 装饰器模式详解:动态扩展对象功能的优雅解决方案
  • 【无标题】 text = text.encode(“utf-8“)
  • python multiprocessing lock锁在相同父进程ID起作用
  • 二分查找题目:二分查找
  • 【C++】继承与模板
  • vLLM推理部署Qwen2.5
  • 【云原生】云原生后端:数据管理
  • 有手就行的大模型教程:如何在个人电脑上部署盘古大模型
  • 2024最新保姆级Python下载安装教程
  • 小白也能轻松制作产品宣传册的软件
  • 消息队列-RabbitMQ