• 大小: 37KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-07
  • 语言: C#
  • 标签: .net  c#  多线程  互斥体  

资源简介

问题: 哲学家就餐问题可以这样表述,假设有六位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只筷子。因为用一只筷子很难吃到意大利面,所以假设哲学家必须用两只筷子吃东西。他们只能使用自己左右手边的那两只筷子。 解决方式: 采用互斥量来解决该问题,每互斥量代表一只筷子。哲学家必须等待身边两只筷子同时可以使用的时候才可以进餐,当使用一会之后,需要自动释放该互斥量(筷子),其他哲学家就可以进行抢占使用。

资源截图

代码片段和文件信息

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个文件信息

评论

共有 条评论