资源简介
问题:
哲学家就餐问题可以这样表述,假设有六位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只筷子。因为用一只筷子很难吃到意大利面,所以假设哲学家必须用两只筷子吃东西。他们只能使用自己左右手边的那两只筷子。
解决方式:
采用互斥量来解决该问题,每互斥量代表一只筷子。哲学家必须等待身边两只筷子同时可以使用的时候才可以进餐,当使用一会之后,需要自动释放该互斥量(筷子),其他哲学家就可以进行抢占使用。
代码片段和文件信息
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace PhEating
{
///
/// Copyright (C) 2008-2012 jiayp
///
/// CLR版本:2.0.50727.1433
/// 机器名称:JIAYP
/// 开发团队
/// 创建时间:10/20/2011 15:45:37
/// 创建年份: 2011
/// 作者:jiaypqq:104652091
/// 功能介绍:客户端设备树,用于展开所有节点
/// 检查时间:
/// 检查人:
/// 检查结果:
///
public partial class MainForm : Form
{
private Mutex[] m_chopsticksMux;
private Thread[] m_thread;
private Label[] m_phInfo;
private CheckBox[] m_chopInfo;
private SynchronizationContext m_context;
private bool m_isRunning = true;
public MainForm()
{
InitializeComponent();
m_context = SynchronizationContext.Current;
m_phInfo = new Label[6];
m_phInfo[0] = label1;
m_phInfo[1] = label2;
m_phInfo[2] = label3;
m_phInfo[3] = label4;
m_phInfo[4] = label5;
m_phInfo[5] = label6;
m_chopInfo = new CheckBox[6];
m_chopInfo[0] = checkBox1;
m_chopInfo[1] = checkBox2;
m_chopInfo[2] = checkBox3;
m_chopInfo[3] = checkBox4;
m_chopInfo[4] = checkBox5;
m_chopInfo[5] = checkBox6;
}
private void button1_Click(object sender EventArgs e)
{
m_chopsticksMux = new Mutex[6];
m_thread = new Thread[6];
for(int i=0;i<6;i++)
{
m_chopsticksMux[i]=new Mutex(true“chop sticks“+i.ToString());
}
ParameterizedThreadStart pts = new ParameterizedThreadStart(Eating);
m_thread[0] = new Thread(pts);
for (int i = 1; i < 6; i++)
{
pts = new ParameterizedThreadStart(Eating);
m_thread[i] = new Thread(pts);
}
Philospher ph = new Philospher();
ph.m_name = “Philospher0“;
ph.m_index = 0;
ChopStick csl = new ChopStick();
csl.m_number = 5;
csl.m_mutex = m_chopsticksMux[5];
ph.m_left = csl;
ChopStick csr = new ChopStick();
csr.m_number = 0;
csr.m_mutex = m_chopsticksMux[0];
ph.m_right = csr;
m_thread[0].Start(ph);
for (int i = 1; i < 6; i++)
{
ph = new Philospher();
ph.m_name = “Philospher“ + i.ToString();
ph.m_index = i;
csl = new ChopStick();
csl.m_number = i-1;
csl.m_mutex = m_chopsticksMux[i - 1];
ph.m_left = csl;
csr = new Cho
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2011-10-20 15:00 PhEating
目录 0 2011-10-20 14:46 PhEating\bin
目录 0 2011-10-20 14:46 PhEating\bin\Debug
文件 24576 2011-10-20 15:00 PhEating\bin\Debug\PhEating.exe
文件 28160 2011-10-20 15:00 PhEating\bin\Debug\PhEating.pdb
文件 5632 2005-11-11 22:25 PhEating\bin\Debug\PhEating.vshost.exe
文件 5866 2011-10-20 15:00 PhEating\MainForm.cs
文件 8997 2011-10-20 14:41 PhEating\MainForm.Designer.cs
文件 5814 2011-10-20 14:41 PhEating\MainForm.resx
目录 0 2011-10-20 14:39 PhEating\obj
目录 0 2011-10-20 15:00 PhEating\obj\Debug
文件 845 2011-10-20 14:41 PhEating\obj\Debug\PhEating.csproj.GenerateResource.Cache
文件 24576 2011-10-20 15:00 PhEating\obj\Debug\PhEating.exe
文件 180 2011-10-20 14:41 PhEating\obj\Debug\PhEating.MainForm.resources
文件 28160 2011-10-20 15:00 PhEating\obj\Debug\PhEating.pdb
文件 180 2011-10-20 14:46 PhEating\obj\Debug\PhEating.Properties.Resources.resources
目录 0 2011-10-20 14:38 PhEating\obj\Debug\Refactor
目录 0 2011-10-20 14:46 PhEating\obj\Debug\TempPE
文件 4608 2011-10-20 14:46 PhEating\obj\Debug\TempPE\Properties.Resources.Designer.cs.dll
文件 903 2011-10-20 14:38 PhEating\obj\Debug\WindowsApplication2.csproj.GenerateResource.Cache
文件 180 2011-10-20 14:04 PhEating\obj\Debug\WindowsApplication2.Properties.Resources.resources
文件 1840 2011-10-20 15:06 PhEating\obj\PhEating.csproj.FileListAbsolute.txt
文件 739 2011-10-20 14:38 PhEating\obj\WindowsApplication2.csproj.FileListAbsolute.txt
文件 3275 2011-10-20 14:46 PhEating\PhEating.csproj
文件 904 2011-10-20 14:39 PhEating\Program.cs
目录 0 2011-10-20 13:03 PhEating\Properties
文件 1194 2011-10-20 13:03 PhEating\Properties\AssemblyInfo.cs
文件 2840 2011-10-20 14:46 PhEating\Properties\Resources.Designer.cs
文件 5612 2011-10-20 13:03 PhEating\Properties\Resources.resx
文件 1106 2011-10-20 14:46 PhEating\Properties\Settings.Designer.cs
............此处省略5个文件信息
相关资源
- 网上书店asp.net+sql毕业设计
- C#&SQLite 学生信息管理系统
- c# 反射获取传入对象的属性拼接sql语
- C#写的串口调试和校验和软件
- WPF动画界面以及WCF通讯框架实现即时
- CSharp波形显示控件源码.rar
- C#Socket 封装了Tcp/Udp传输字串、文件、
- C#随机生成发货地址,生成详细地址,
- 用c#编写的万年历 用c#编写的万年历
- 构建Delaunay三角网的c#源程序
- C#创建windows服务+Form+Web调用服务
- P2P之UDP穿透NAT的原理与C#实现
- 国家商用密码算法开放动态库及演示
- C# WinForm TreeListView控件用法
- c# picture下图片移动
- C# 简单的tcp服务器demo
- C#.net发送邮件完整源代码DEMO完整版
- c#的P2P聊天程序完整源码
- SQLite操作类C#
- asp.net 在线拍照
- C#的GDI+绘制图形分层拖放操作源码
- C#调用Ansys二次开发
- 超漂亮的C#登录窗口动画效果
- C#将jpg格式图像转换为数据流,数据流
- 双滑块控件.rar
- asp.net做的简单论坛发帖系统
- c# 验证码识别源代码
- C# 实现Windows任务管理器源代码
- TINdelaunay三角网生成算法
- JSON.NET源码
评论
共有 条评论