父亲儿子女儿放取水果进程/线程间通信程序设计与实现

代码:
#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);
}

运行结果:

父亲儿子女儿放取水果进程/线程间通信程序设计与实现相关推荐

  1. 编写Windows下父亲儿子女儿放取水果进程同步的演示程序。(C/C++)

    问题描述:桌上有一空盘,最多允许存放一个水果.爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果. 编写Windows下父亲儿子女儿放取水果进程同步的演示程序. 问题分析及思路: ...

  2. Windows下父亲儿子女儿放取水果进程同步的演示程序

    问题描述 桌上有一空盘,最多允许存放一个水果.爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果.试用P.V操作实现爸爸.儿子.女儿三个并发进程的同步.提示:设置一个信号量表示可 ...

  3. 进程和线程的概念、区别及进程线程间通信

    进程与线程的概念,以及为什么要有进程线程,其中有什么区别,他们各自又是怎么同步的? 1. 基本概念: 进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发: 线程是进程 ...

  4. 父亲儿子女儿三人水果分配

    问题:桌子上有一个空盘子,允许存放一只水果.爸爸可向盘中放苹果,也可向盘中放橘子.儿子专等吃苹果,女儿专等吃橘子.规定盘中空时,一次只能放一个水果供吃者取用. 要求:使用P.V原语实现爸爸.儿子.女儿 ...

  5. 【Linux进程/线程间通信】实现荔枝派zero与电脑串口通信

    本文采取两种方法来实现: <1>System V IPC 的消息队列(message queue) <2>有名信号量/灯的同步操作(semaphore) 一.System V ...

  6. NNG/NanoMsg进程线程间通讯库

    NNG/nanomsg 是最近项目上使用到的一个通信库,用来实现进程间过程调用和线程间通信,很是方便. NNG 是 nanomsg 的继任版本,而 nanomsg 则是流行的 ZMQ 的 C 重写版. ...

  7. 【Java 并发编程】线程简介 ( 进程与线程 | 并发概念 | 线程间通信 | Java 并发 3 特性 )

    文章目录 一.进程与线程 二.并发 三.线程间通信 四.Java 并发 3 特性 一.进程与线程 最开始是没有线程这个概念的 , 一个应用程序就是一个进程 , 应用程序运行时 , 如果还要处理与用户交 ...

  8. (转)C++进程间和线程间通信

     进程间和线程间通信(原文章出自http://blog.sina.com.cn/s/blog_4a93ccea0102ea1w.html) 1.许多程序和应用一起工作达到某个共同目的的任务集.每个 ...

  9. android线程间通信的几种方法_Android进程间和线程间通信方式

    进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程:是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位 ...

最新文章

  1. RelativeLayout布局,不希望文本盖住其他组件
  2. 全球及中国深紫外LED行业盈利状况与前景动态研究报告2022版
  3. 辨别 Python 中 load 和 loads 的小技巧
  4. leetcode - 638. 大礼包
  5. leetcode 两个排序的中位数 python
  6. java报505_解决java代码测试http协议505错误
  7. 自增字段不连续_MySQL中自增主键不连续之解决方案。(20131109)
  8. Cost Function of Support Vector Machine
  9. QCC300x hello world
  10. 南威尔士警方称,2017年欧洲冠军联赛决赛使用的人脸识别技术错误率超过90%
  11. SQL-查询最后一条数据
  12. poi 复制下拉框内容入力规则
  13. MindSpore实现手写数字识别
  14. 学习笔记(117):R语言入门基础-前10名的行业和地区展示
  15. 直通车在第一次做应该如何出价呢?如何出价更合理?
  16. 图形学笔记(二)——线画图元
  17. Unity官方离线中文文档大集合
  18. android 百度坐标 gps,Android中gps定位不返回经纬度的解决方案
  19. cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit O
  20. caffe2的安装与遇到的问题和解决问题步骤

热门文章

  1. 城市网络安全态势感知工作思路探析
  2. 360wifi一直在启用中
  3. 手把手教你编写最简单的性能脚本
  4. 一款很好看的个人主页html源码免费下载
  5. 借助计算机音乐,计算机音乐教育在高校中的重要性
  6. Hadoop综合试题5
  7. Java必备基础一——一文读懂的Java基础中的基础
  8. 【高项】十大管理部分:5*10*47 ITTO详表(含关键概念解释)
  9. 修复lsp,360浏览器可以上网其它软件不行
  10. 计算机技术指标主频是指微机的时钟频率,计算机中央处理器(CPU)的主要性能指标...