有關哲學家就餐程式的問題,有關哲學家就餐程式的問題

2023-01-02 08:45:37 字數 3308 閱讀 5918

1樓:墮落天使的愛

1全部哲學家就餐問題可以這樣表述,假設有五位哲學家圍坐在一張圓形餐桌旁,做以下兩件事情之一:吃飯,或者思考。吃東西的時候,他們就停止思考,思考的時候也停止吃東西。

餐桌中間有一大碗義大利麵,每兩個哲學家之間有一隻餐叉。因為用一隻餐叉很難吃到義大利麵,所以假設哲學家必須用兩隻餐叉吃東西。他們只能使用自己左右手邊的那兩隻餐叉。

哲學家就餐問題有時也用米飯和筷子而不是義大利麵和餐叉來描述,因為很明顯,吃米飯必須用兩根筷子。哲學家從來不交談,這就很危險,可能產生死鎖,每個哲學家都拿著左手的餐叉,永遠都在等右邊的餐叉(或者相反)。即使沒有死鎖,也有可能發生資源耗盡。

例如,假設規定當哲學家等待另一隻餐叉超過五分鐘後就放下自己手裡的那一隻餐叉,並且再等五分鐘後進行下一次嘗試。這個策略消除了死鎖(系統總會進入到下一個狀態),但仍然有可能發生「活鎖」。如果五位哲學家在完全相同的時刻進入餐廳,並同時拿起左邊的餐叉,那麼這些哲學家就會等待五分鐘,同時放下手中的餐叉,再等五分鐘,又同時拿起這些餐叉。

在實際的計算機問題中,缺乏餐叉可以類比為缺乏共享資源。一種常用的計算機技術是資源加鎖,用來保證在某個時刻,資源只能被一個程式或一段**訪問。當一個程式想要使用的資源已經被另一個程式鎖定,它就等待資源解鎖。

當多個程式涉及到加鎖的資源時,在某些情況下就有可能發生死鎖。例如,某個程式需要訪問兩個檔案,當兩個這樣的程式各鎖了一個檔案,那它們都在等待對方解鎖另一個檔案,而這永遠不會發生。

2樓:大古靈精怪

汗。我不是很懂。看見你這個提問很感興趣就進來了。冒失了點。

你那幾個英文就是那單詞的開頭啊。能不能幫助到你?

吃在英文說法就是eat

思考在英文說法就是think

等待在英文說法就是wait

會不會與這個有關呢?

因為我聽別人說程式設計師英文都很棒的。所以又覺得自己冒犯了。望原諒。

3樓:匿名使用者

人的思索模式**於動作

先動作後,程式化模式化,整個過程需用時間和空間,所以對於未發生的動作過程是以形容詞為先。動作過程為後序。所以叫做程式。

結果:形容詞+動詞=形容詞

(動作過程/模式+應該做的動作+決定時間性空間性)思考+等待+吃

哲學家就餐問題 急急急

4樓:少有人教的那些事

有五個哲學家圍坐在一圓桌旁,桌**有一盤通心粉,每人面前有一隻空盤子,每兩人之間放一隻筷子每個哲學家的行為是思考,感到飢餓,然後吃通心粉.為了吃通心粉,每個哲學家必須拿到兩隻筷子,並且每個人只能直接從自己的左邊或右邊去取筷子

#define n 5

void philosopher (int i)}為防止死鎖發生可採取的措施:

最多允許4個哲學家同時坐在桌子周圍僅當一個哲學家左右兩邊的筷子都可用時,才允許他拿筷子()給所有哲學家編號,奇數號的哲學家必須首先拿左邊的筷子,偶數號的哲學家則反之 為了避免死鎖,把哲學家分為三種狀態,思考,飢餓,進食,並且一次拿到兩隻筷子,否則不拿.

哲學家就餐問題解法(1)

#define n 5

void philosopher (int i)}哲學家就餐問題解法(2)

#define n 5

#define thinking 0

#define hungry 1

#define eating 2

#typedef int semaphore;

int state[n];

semaphore mutex=1;

semaphore s[n];

void test(int i)

}void philosopher (int i)}state[ i ] = thinkings[ i ] = 0

-----------

其實我還沒有懂……

哲學家就餐問題 100

5樓:朱曾巫馬雅霜

兩個地方應該是pv操作,pv都是操作元語,不可中斷p操作是將訊號量-1

v操作是將訊號量+1

pv一定要配對使用

哲學家進餐可以通過訊號量機制解決,避免死鎖註釋如下:

void

test(int

i)//測試哲學家i是否滿足eating條件//通過p操作後進入eating,否則在p(s[i])處阻塞}state[i]=thinking;

//初始化狀態位

s[i]=0;

//初始化s[i]

訊號量void

philosopher(int

i)p(mutex);

//對mutex加鎖,防止多個程序同時對state[i]操作state[i]=thinking;

//設定i狀態

test([i-1]%5);

//為左邊和右邊測試並設定s狀態

test([i+1]%5);

v(mutex);

//釋放訊號量}

6樓:

五位哲學家坐在一張圓桌,桌子**的一個前空盤通心粉每人,每兩個男人之間放一根筷子行為的每一個哲學家的想法,感覺餓了,然後吃通心粉吃麵食,每個哲學家必須兩根筷子,而且每個人只能直接從左邊或右邊,拿起筷子

定義n 5

無效哲學家(int i)的 }

為了防止死鎖發生時所採取的措施:

最多允許4個哲學家圍坐在桌子同時,只有當左,右兩側的哲學家筷子是可以的,只是為了讓他的筷子,(?),所有的哲學家數,奇數號的哲學家必須首先走左邊的筷子,偶數哲學家,反之亦然,為了避免死鎖, ,哲學家分為三種狀態,思考,飢餓,吃飯,和時間拿到兩筷子,或不採取

在哲學家就餐問題的解決方案( 1)

定義n 5

無效哲學家(我) }

哲學家就餐問題的解決方案(2)

定義n 5

定義的思考0

定義hungry 1

定義吃2 br />#的typedef int訊號;

int狀態[n];

訊號量互斥= 1;

訊號[n];

無效測試(int i)

>} 無效哲學家(我) }

狀態[ =思維

[i] = 0

-----------

事實上,我不明白......

7樓:臸鏡

因為是一張圓的桌子,桌子坐五個人,每個人的右手邊有一支筷子(桌子上共5只),2號坐在1號的左邊,那麼1號拿左手邊的筷子和2號拿右手邊的筷子便是取同一支筷子,3,4號同理。

點反對的人是非要我補這張圖麼?看清楚題主問的什麼好伐?有要**麼?一天就知道上網找**抄不會自己寫的也是人才

哲學家為什麼要思考哲學的問題,哲學家為什麼要研究哲學

你的這個問題就像是我們問老師為什么思考教學的問題,醫生為什麼要思考醫學上的問題,科學家為什麼要思考科研上的問題。哲學家為什麼要思考哲學的問題?當然是因為哲學是他們的本職業務啊。就如同在我們的現實生活中,我們讀書的時候總不可能每天機械的聽老師講課。然後機械的完成作業,完全不用大腦思考學習方面的問題吧。...

求助哲學家那些偉大的哲學家最後瘋了!!!

不敢自稱哲學家,談談想法和您交流。1 證明自己 不是活在夢中的一個非哲學方法就回 是 掐自己一下,如答果感到疼,那就是說明你不在夢中。這個方法簡單易行,廣泛使用。2 下面試著用馬克思主義觀點分析一下。夢也是人的意識的一種存在狀態,馬克思主義認為,意識是物質的反映,如果但從這一點來看,單純的意識無法分...

國外有哪些哲學家,西方著名的哲學家有哪些?

一 古希臘 泰勒斯 畢達哥拉斯 赫拉克利特,德拉克利特 伊壁鳩魯 蘇格拉底 柏拉圖 亞里士多德等等 二 古羅馬 西塞羅 盧克萊修 斐洛 愛比克泰德 德爾圖良 第歐根尼 普羅提諾等等 三 中世紀 奧古斯丁 德爾圖良 阿爾伯特等等四 近現代 弗蘭西斯 培根 笛卡爾 斯賓諾莎 洛克 萊布尼茨 康德 邊沁 ...