資源簡介
問題:
哲學家就餐問題可以這樣表述,假設有六位哲學家圍坐在一張圓形餐桌旁,做以下兩件事情之一:吃飯,或者思考。吃東西的時候,他們就停止思考,思考的時候也停止吃東西。餐桌中間有一大碗意大利面,每兩個哲學家之間有一只筷子。因為用一只筷子很難吃到意大利面,所以假設哲學家必須用兩只筷子吃東西。他們只能使用自己左右手邊的那兩只筷子。
解決方式:
采用互斥量來解決該問題,每互斥量代表一只筷子。哲學家必須等待身邊兩只筷子同時可以使用的時候才可以進餐,當使用一會之后,需要自動釋放該互斥量(筷子),其他哲學家就可以進行搶占使用。

代碼片段和文件信息
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個文件信息
評論
共有 條評論