进程同步 吃水果问题

xxy880926 2009-01-08 11:32:18
模拟吃水果的同步模型:桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。
使用C++实现
...全文
1082 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuxueling 2009-02-09
  • 打赏
  • 举报
回复
//
// fruit.cpp
// ~~~~~~~~~~~~~~~~
//
// @author <zhuxueling@pica.com>
// @data 2009-02-09

#include <string>
#include <iostream>
#include "Thread.hpp"

using namespace Traxex;

enum Fruit{ None, Apple, Orange};

class Plate{
public:
void add( std::string name, Fruit f){
while( true){
c_eat.wait();
std::cout << name << "\tadd\t";
if( f == Apple){
std::cout << "an Apple\n"; c_apple.signal(); Sleep( 1);
}else{
std::cout << "an Orange\n";c_orange.signal(); Sleep( 0.8);
}

}

}
void eat( std::string name, Fruit f){
while( true){
if( f == Apple) c_apple.wait();
else c_orange.wait();

std::cout << name << "\teat\t";
if( f == Apple) std::cout << "an Apple\n";
else std::cout << "an Orange\n";
Sleep( 0.9);
c_eat.signal();
}
}

void init(){
c_eat.signal();
c_eat.signal();
}
private:
Cond c_apple;
Cond c_orange;
Cond c_eat;
};


int main(){
Plate plate;
Thread father ( plate, &Plate::add, std::string("father"), Apple);
Thread mother ( plate, &Plate::add, std::string("mother"), Orange);

Thread boy_a ( plate, &Plate::eat, std::string("boy_a" ), Orange);
Thread boy_b ( plate, &Plate::eat, std::string("boy_b" ), Orange);

Thread girl_a ( plate, &Plate::eat, std::string("girl_a"), Apple);
Thread girl_b ( plate, &Plate::eat, std::string("girl_b"), Apple);

//start
father.start(); mother.start();
boy_a.start(); boy_b.start();
girl_a.start(); girl_b.start();

//init
Sleep( 1);
plate.init();
//join
father.join(); mother.join();
boy_a.join(); boy_b.join();
girl_a.join(); girl_b.join();


}


o46382509 2009-02-08
  • 打赏
  • 举报
回复
PV操作问题!操作系统上有些源代码你可以参考下!
BuleRiver 2009-02-08
  • 打赏
  • 举报
回复
多线程实现,建议LZ参考理发师问题

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧