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

信号量机制之苹果-橘子问题

桌上有一空盘,允许存放一种水果。爸爸可向盘中放苹果,也可向盘中放橘子,儿子专等吃盘中的橘子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一个水果供吃者取用。

要求:请用信号量机制实现爸爸、儿子、女儿三个并发进程的同步。

#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>// 定义信号量
sem_t empty;  // 盘子是否为空
sem_t apple;  // 盘子中的苹果数量
sem_t orange; // 盘子中的橘子数量// 爸爸放水果的操作
void *father(void *arg) {while (1) {sem_wait(&empty);   // 盘子为空时,爸爸才可以放水果if (rand() % 2 == 0) {  printf("爸爸把一个苹果放进盘子里。\n");sem_post(&apple);   } else {printf("爸爸把一个橘子放进盘子里。\n");sem_post(&orange);  }}return NULL;
}// 儿子取水果
void *son(void *arg) {while (1) {sem_wait(&orange);  printf("儿子从盘子里吃了一个橘子。\n");sem_post(&empty);   }return NULL;
}// 女儿取水果
void *daughter(void *arg) {while (1) {sem_wait(&apple);  printf("女儿从盘子里吃了一个苹果。\n");sem_post(&empty);  }return NULL;
}int main() {pthread_t father_thread, son_thread, daughter_thread;// 初始化信号量sem_init(&empty, 0, 1);  // 盘子初始为空sem_init(&apple, 0, 0);  // 初始苹果sem_init(&orange, 0, 0); // 初始橘子pthread_create(&father_thread, NULL, father, NULL);pthread_create(&son_thread, NULL, son, NULL);pthread_create(&daughter_thread, NULL, daughter, NULL);pthread_join(father_thread, NULL);pthread_join(son_thread, NULL);pthread_join(daughter_thread, NULL);sem_destroy(&empty);sem_destroy(&apple);sem_destroy(&orange);return 0;
}

http://www.lryc.cn/news/521108.html

相关文章:

  • 三相无刷电机控制|FOC理论04 - 克拉克变换 + 帕克变换的最终目标
  • Nacos: 一个动态服务发现与配置管理平台
  • 认识机器学习中的结构风险最小化准则
  • 计算机网络 (35)TCP报文段的首部格式
  • ubuntu24.04安装docker显卡工具包nvidia-container-toolkit
  • rknn环境搭建之docker篇
  • OpenCV相机标定与3D重建(56)估计物体姿态(即旋转和平移)的函数solvePnPRansac()的使用
  • vue倒计时组件封装,根据每个循环项的倒计时是否结束添加新类名。
  • 缩放 对内外参的影响
  • SQL面试题2:留存率问题
  • 晨辉面试抽签和评分管理系统之九:随机编排考生的分组(以教师资格考试面试为例)
  • 【EtherCATBridge】- KRTS C++示例精讲(9)
  • C++实现设计模式--- 观察者模式 (Observer)
  • iOS 解决两个tableView.嵌套滚动手势冲突
  • Lianwei 安全周报|2025.1.13
  • rtthread学习笔记系列(2) -- 宏
  • 美摄科技PC端视频编辑解决方案,为企业打造专属的高效创作平台
  • 服务端开发模式-thinkphp-重新整理workman
  • HTB:Access[WriteUP]
  • 【论文笔记】SmileSplat:稀疏视角+pose-free+泛化
  • 电机控制的数字化升级:基于DSP和FPGA的仿真与实现
  • 1/14 C++
  • java springboot3.x jwt+spring security6.x实现用户登录认证
  • YOLOv5训练长方形图像详解
  • 【2025最新】Poe保姆级订阅指南,Poe订阅看这一篇就够了!最方便使用各类AI!
  • type1-100,2 words
  • Leetcode 377. 组合总和 Ⅳ 动态规划
  • 计算机网络(五)——传输层
  • 【SQL】进阶知识 -- 删除表的几种方法(包含表内单个字段的删除方法)
  • 【搭建JavaEE】(3)前后端交互,请求响应机制,JDBC数据库连接