信号量实现同步之苹果橘子问题
游戏规则:
桌子上有一个盘子,盘子中可以放置的水果数量一定,妈妈可以一次放入一个橙子,爸爸可以一次放入一个苹果,儿子一次吃一个苹果,女儿一次吃一个橙子。
利用信号量来实现这一过程,使得四个人可以有条不紊的进行优秀。
//
// apple_orange.c
//
//
// Created by YIN on 2021/5/24.
//#include "apple_orange.h"
#include "stdio.h"
#include "pthread.h"
#include "semaphore.h"
#include <unistd.h>
#include <dispatch/dispatch.h>
#define N 5
dispatch_semaphore_t empty;
dispatch_semaphore_t apple;
dispatch_semaphore_t orange;
dispatch_semaphore_t mutex;int fruitCount = 0;void* motherThd(void* arg)
{while(1){dispatch_semaphore_wait(empty, DISPATCH_TIME_FOREVER);dispatch_semaphore_wait(mutex, DISPATCH_TIME_FOREVER);printf("妈妈放入一个橙子,盘子中当前水果共:%d\n",++fruitCount);dispatch_semaphore_signal(mutex);dispatch_semaphore_signal(orange);sleep(1);}
}void* fatherThd(void* arg)
{while(1){dispatch_semaphore_wait(empty, DISPATCH_TIME_FOREVER);dispatch_semaphore_wait(mutex, DISPATCH_TIME_FOREVER);printf("爸爸放入一个苹果,盘子中当前水果共:%d\n",++fruitCount);dispatch_semaphore_signal(mutex);dispatch_semaphore_signal(apple);sleep(2);}
}void* sonThd(void* arg)
{while(1){dispatch_semaphore_wait(apple, DISPATCH_TIME_FOREVER);dispatch_semaphore_wait(mutex, DISPATCH_TIME_FOREVER);printf("儿子拿走一个苹果,盘子中当前水果共:%d\n",--fruitCount);dispatch_semaphore_signal(mutex);dispatch_semaphore_signal(empty);sleep(1);}
}void* daughterThd(void* arg)
{while(1){dispatch_semaphore_wait(orange, DISPATCH_TIME_FOREVER);dispatch_semaphore_wait(mutex, DISPATCH_TIME_FOREVER);printf("女儿拿走一个橙子,盘子中当前水果共:%d\n",--fruitCount);dispatch_semaphore_signal(mutex);dispatch_semaphore_signal(empty);sleep(2);}
}int main(int argc, char const *argv[])
{pthread_t father, mother, son, daughter;dispatch_semaphore_t *sem_e = ∅*sem_e = dispatch_semaphore_create(5);dispatch_semaphore_t *sem_a = &apple;*sem_a = dispatch_semaphore_create(0);dispatch_semaphore_t *sem_o = &orange;*sem_o = dispatch_semaphore_create(0);dispatch_semaphore_t *sem_m = &mutex;*sem_m = dispatch_semaphore_create(1);pthread_create(&father, NULL, fatherThd, NULL);pthread_create(&mother, NULL, motherThd, NULL);pthread_create(&son, NULL, sonThd, NULL);pthread_create(&daughter, NULL, daughterThd, NULL);pthread_join(father, NULL);pthread_join(mother, NULL);pthread_join(son, NULL);pthread_join(daughter, NULL);return 0;}
信号量实现同步之苹果橘子问题相关推荐
- 【C# winform】操作系统:进程同步程序设计——多生产者多消费者苹果橘子实验
实验内容 桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果.爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,儿子专门等待吃盘子中的橘子,女儿专门等吃盘子中的苹果.试编程实现爸爸.妈妈 ...
- 进程间共享内存(信号量实现同步)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://yongjiuzhizhen.blog.51cto.com/7980250/132 ...
- 【转】细说.NET中的多线程 (五 使用信号量进行同步)
上一节主要介绍了使用锁进行同步,本节主要介绍使用信号量进行同步 使用EventWaitHandle信号量进行同步 EventWaitHandle主要用于实现信号灯机制.信号灯主要用于通知等待的线程.主 ...
- 操作系统中PV操作实现进程同步与互斥问题(以苹果橘子问题为例)
桌上有一空盘,允许存放一个水果.爸爸可向盘中放苹果,也可向盘中放桔子, 儿子专等吃盘中的桔子,女儿专等吃盘中的苹果.规定当盘空时,一次只能放一个水果供吃者取用, 请用P.v原语实现爸爸.儿子.女儿三个 ...
- linux多线程学习(六)——信号量实现同步
在上一篇文章中已经用信号量来实现线程间的互斥,达到了互斥锁的效果,今天这篇文章将讲述怎样用信号量去实现同步. 信号量的互斥同步都是通过PV原语来操作的,我们可以通过注册两个信号量,让它们在互斥的问题上 ...
- 水果整理篇--苹果橘子
面向对象:把数据及对数据的操作方法放在一起,作为一个相互依存的整体--对象.对同类对象抽象出其 共性(属性) ,形成类.类中的大多数数据,只能用本类的 方法 进行处理.类通过一个简单的外部接口与外界发 ...
- PS创意合成苹果橘子
首先我们找到一个苹果素材,然后打开. 第二步,我们再放入柠檬的素材 第三步,我们思考一下,既然要合成,我们就要进行抠图,所以这一步,我们选取一个柠檬瓣,用钢笔抠下来,如图 第四步,好了,柠檬瓣已经抠出 ...
- 【iCore3 双核心板_ uC/OS-III】例程七:信号量——任务同步
实验指导书及代码包下载: http://pan.baidu.com/s/1kVjeN2n iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- [教学]cyclegan风格迁移_斑马to白马_油画风格_苹果橘子等
上效果图: 01train_cyclegan.py的前几行是配置参数,我们可以自行修改 import torch import sys from torch.utils.data import Dat ...
最新文章
- python100行代码-100 Lines Python
- mysql--SQL编程(关于mysql中的日期,关于重叠) 学习笔记2.2
- Linux基础7 文件管理类命令
- mysql8.0默认引擎是什么_MySQL8.0新特性【转】
- 推荐一款cpp解析json工具--rapidjson
- Solr6.1.0Windows安装步骤
- php m grep event,php-如何杀死与30分钟以上的grep匹配的进程?
- PostgreSQL客户端psql常用命令
- 如何将枯燥的大数据呈现为可视化的图?
- Flutter进阶—实现动画效果(五)
- 并发的线程入门到并发安全原理解析,offer拿到手软
- 综合后端各种类型文件
- linux 内存管理_真香!Linux 原来是这么管理内存的
- [裴礼文数学分析中的典型问题与方法习题参考解答]4.4.8
- mina简单实用_Mina框架的简单例子
- C++11新特性——std::bind参数绑定
- 网易Airtest跨平台的UI自动化测试框架
- ISP算法:gamma矫正
- Ubuntu18.04安装RTL8125/RTL8168等网卡驱动程序
- Check list of writing
热门文章
- Explore the Sky丨来 TiDB Hackathon 2021 探索无限可能
- mysql执行语句时c盘突然占满_C盘突然变满了,怎么办?
- Python,查看内存内容,类似HxD的排列
- 第二章 编程练习(C++ Primer Plus)
- 下拉框选中状态html,js中select下拉框选中
- 莫烦python-Tensorflow笔记
- python前端学习之css
- iPhone 14 系列来了!能动的“药丸屏”,Plus 型号回归,最高售价 13499 元
- 诸葛io , 面向数据智能时代的大数据实践(下)
- ESP32上手笔记 | 02 - ESP32-Arduino开发环境搭建