问题描述
桌上有一只盘子,每次只能放一只水果,爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,一个儿子专等吃盘子中的橘子,一个女儿专等吃盘子里的苹果
问题分析
Semaphore(信号量)三个:plate(互斥),apple,orange。
Thread(线程)四个:father,mother,son,daughter。
代码实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace 苹果桔子
{
class Program
{
private static Semaphore plate, apple, orange;
static void Main(string[] args)
{
plate = new Semaphore(1, 1);
apple = new Semaphore(0, 1);
orange = new Semaphore(0, 1);
Thread father = new Thread(Father);
Thread mother = new Thread(Mother);
Thread son = new Thread(Son);
Thread daughter = new Thread(Daughter);
father.Start();
daughter.Start();
mother.Start();
son.Start();
}
protected static void Father()
{
for (; ; )
{
plate.WaitOne();
Console.WriteLine("爸爸放入一个苹果");
apple.Release();
}
}
protected static void Mother()
{
for (; ; )
{
plate.WaitOne();
Console.WriteLine("妈妈放入一个桔子");
orange.Release();
}
}
protected static void Son()
{
for (; ;)
{
orange.WaitOne();
Console.WriteLine("儿子吃掉桔子");
plate.Release();
Console.WriteLine("盘子为空\n");
}
}
protected static void Daughter()
{
for (; ;)
{
apple.WaitOne();
Console.WriteLine("女儿吃掉苹果");
plate.Release();
Console.WriteLine("盘子为空\n");
}
}
}
}