父亲儿子女儿放取水果进程/线程间通信程序设计与实现
父亲儿子女儿放取水果进程/线程间通信程序设计与实现
代码:
#include<unistd.h>
#include<stdio.h>
#include<pthread.h>
#include<stdlib.h>
pthread_mutex_t onelock;
pthread_mutex_t twolock;
int mutex=1;//互斥
int count=0;//计数,记录放了多少个水果
int apple=0;//盘中苹果的个数
int orange=0;//盘中桔子的个数
int choice=0;//父亲选择放置桔子还是苹果
int number;//记录应该放置多少个水果
void wait()
{//wait操作pthread_mutex_lock(&onelock);while(mutex<=0);mutex=mutex-1;pthread_mutex_unlock(&onelock);
}void signal()
{//signal操作pthread_mutex_lock(&twolock);while(mutex!=0);mutex= mutex+1;pthread_mutex_unlock(&twolock);
}void *father()
{while(1){if(orange==0&&apple==0){wait();sleep(2);if(choice==1){orange=1;printf("爸爸放置了一个桔子\n");}if(choice==2){apple=1;printf("爸爸放置了一个苹果\n");}choice=0; count++;signal();}if(count==number){pthread_exit (NULL);}}
}
void *son()
{while(1){if(orange==1){wait();sleep(2);orange=0;choice=0; printf("儿子从盘子中拿了一个桔子\n");if(count!=number){scanf("%d",&choice);}signal();}if(count==number&&orange!=1){pthread_exit (NULL);}}
}
void *daughter()
{while(1){if(apple==1){wait();sleep(2);apple=0;choice=0; printf("女儿从盘子中拿了一个苹果\n");if(count!=number){scanf("%d",&choice);}signal();}if(count==number&&apple!=1){pthread_exit (NULL);}}
}int main()
{pthread_mutex_init(&onelock,NULL);pthread_mutex_init(&twolock,NULL);
//父亲 女儿 儿子进程
pthread_t fatherThread;pthread_t daughterThread;pthread_t sonThread;printf("请输入父亲放置水果的次数:");scanf("%d",&number);printf("请输入父亲放置的水果是什么,1为桔子,2为苹果: \n");scanf("%d",&choice); pthread_create(&fatherThread,NULL,father,NULL);pthread_create(&daughterThread,NULL,daughter,NULL);pthread_create(&sonThread,NULL,son,NULL);pthread_join(fatherThread,NULL);pthread_join(daughterThread,NULL);pthread_join(sonThread,NULL);
}
运行结果:
父亲儿子女儿放取水果进程/线程间通信程序设计与实现相关推荐
- 编写Windows下父亲儿子女儿放取水果进程同步的演示程序。(C/C++)
问题描述:桌上有一空盘,最多允许存放一个水果.爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果. 编写Windows下父亲儿子女儿放取水果进程同步的演示程序. 问题分析及思路: ...
- Windows下父亲儿子女儿放取水果进程同步的演示程序
问题描述 桌上有一空盘,最多允许存放一个水果.爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果.试用P.V操作实现爸爸.儿子.女儿三个并发进程的同步.提示:设置一个信号量表示可 ...
- 进程和线程的概念、区别及进程线程间通信
进程与线程的概念,以及为什么要有进程线程,其中有什么区别,他们各自又是怎么同步的? 1. 基本概念: 进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发: 线程是进程 ...
- 父亲儿子女儿三人水果分配
问题:桌子上有一个空盘子,允许存放一只水果.爸爸可向盘中放苹果,也可向盘中放橘子.儿子专等吃苹果,女儿专等吃橘子.规定盘中空时,一次只能放一个水果供吃者取用. 要求:使用P.V原语实现爸爸.儿子.女儿 ...
- 【Linux进程/线程间通信】实现荔枝派zero与电脑串口通信
本文采取两种方法来实现: <1>System V IPC 的消息队列(message queue) <2>有名信号量/灯的同步操作(semaphore) 一.System V ...
- NNG/NanoMsg进程线程间通讯库
NNG/nanomsg 是最近项目上使用到的一个通信库,用来实现进程间过程调用和线程间通信,很是方便. NNG 是 nanomsg 的继任版本,而 nanomsg 则是流行的 ZMQ 的 C 重写版. ...
- 【Java 并发编程】线程简介 ( 进程与线程 | 并发概念 | 线程间通信 | Java 并发 3 特性 )
文章目录 一.进程与线程 二.并发 三.线程间通信 四.Java 并发 3 特性 一.进程与线程 最开始是没有线程这个概念的 , 一个应用程序就是一个进程 , 应用程序运行时 , 如果还要处理与用户交 ...
- (转)C++进程间和线程间通信
进程间和线程间通信(原文章出自http://blog.sina.com.cn/s/blog_4a93ccea0102ea1w.html) 1.许多程序和应用一起工作达到某个共同目的的任务集.每个 ...
- android线程间通信的几种方法_Android进程间和线程间通信方式
进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程:是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位 ...
最新文章
- RelativeLayout布局,不希望文本盖住其他组件
- 全球及中国深紫外LED行业盈利状况与前景动态研究报告2022版
- 辨别 Python 中 load 和 loads 的小技巧
- leetcode - 638. 大礼包
- leetcode 两个排序的中位数 python
- java报505_解决java代码测试http协议505错误
- 自增字段不连续_MySQL中自增主键不连续之解决方案。(20131109)
- Cost Function of Support Vector Machine
- QCC300x hello world
- 南威尔士警方称,2017年欧洲冠军联赛决赛使用的人脸识别技术错误率超过90%
- SQL-查询最后一条数据
- poi 复制下拉框内容入力规则
- MindSpore实现手写数字识别
- 学习笔记(117):R语言入门基础-前10名的行业和地区展示
- 直通车在第一次做应该如何出价呢?如何出价更合理?
- 图形学笔记(二)——线画图元
- Unity官方离线中文文档大集合
- android 百度坐标 gps,Android中gps定位不返回经纬度的解决方案
- cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit O
- caffe2的安装与遇到的问题和解决问题步骤