操作系統(tǒng)實(shí)驗(yàn)報(bào)告.doc
約25頁(yè)DOC格式手機(jī)打開展開
操作系統(tǒng)實(shí)驗(yàn)報(bào)告,頁(yè)數(shù):15字?jǐn)?shù):5066實(shí)驗(yàn)一、哲學(xué)家就餐問(wèn)題一、問(wèn)題描述哲學(xué)家就餐問(wèn)題是有dijkatra提出并解決的典型同步問(wèn)題。該問(wèn)題描述的是有五個(gè)哲學(xué)家共用一張圓桌,分別坐在周圍的五張椅子上,圓桌上有五個(gè)碗和五只筷子,他們的生活方式是交替的進(jìn)行思考和就餐。平時(shí),一個(gè)哲學(xué)家進(jìn)行思考,饑餓時(shí)便試圖取用其左右最靠近他...
![](http://img.queshao.com/images/pcgzh.gif)
![](http://preview.queshao.com/tobuy/68181.gif)
內(nèi)容介紹
此文檔由會(huì)員 usactu 發(fā)布
操作系統(tǒng)實(shí)驗(yàn)報(bào)告
頁(yè)數(shù):15 字?jǐn)?shù):5066
實(shí)驗(yàn)一、哲學(xué)家就餐問(wèn)題
一、問(wèn)題描述
哲學(xué)家就餐問(wèn)題是有Dijkatra提出并解決的典型同步問(wèn)題。該問(wèn)題描述的是有五個(gè)哲學(xué)家共用一張圓桌,分別坐在周圍的五張椅子上,圓桌上有五個(gè)碗和五只筷子,他們的生活方式是交替的進(jìn)行思考和就餐。平時(shí),一個(gè)哲學(xué)家進(jìn)行思考,饑餓時(shí)便試圖取用其左右最靠近他的筷子,只有在他拿到兩只筷子時(shí)才能進(jìn)餐。進(jìn)餐完,放下筷子繼續(xù)思考。
二、問(wèn)題分析
該問(wèn)題可用記錄型信號(hào)量或者是AND型信號(hào)量解決。
記錄型信號(hào)量解決
經(jīng)分析可知,放在桌子上的筷子是臨界資源,在一段時(shí)間內(nèi)只允許一位哲學(xué)家使用,為了實(shí)現(xiàn)對(duì)筷子的互斥使用,可以用一個(gè)信號(hào)量表示一只筷子,由這五個(gè)信號(hào)量組成信號(hào)量數(shù)組。當(dāng)哲學(xué)家饑餓時(shí)總是先拿其左邊的筷子,成功后,再去拿右邊的筷子,又成功后方可就餐。進(jìn)餐完,又先放下他左邊的筷子,再放下右邊筷子。這個(gè)算法可以保證不會(huì)有兩個(gè)相鄰的哲學(xué)家同時(shí)就餐,但有可能引起死鎖。
AND型信號(hào)量解決
在哲學(xué)家就餐過(guò)程中,要求每個(gè)哲學(xué)家先獲得兩個(gè)臨界資源后方能就餐,這在本質(zhì)上就是AND同步問(wèn)題,故用AND信號(hào)量機(jī)制可獲得最簡(jiǎn)潔的解法。
三、程序偽代碼
#include
#include
#include
#define N 5 /* 哲學(xué)家的個(gè)數(shù) */
#define P(S) WaitForSingleObject(S, INFINITE) // 定義Windows下的P操作
#define V(S) ReleaseSemaphore(S, 1, NULL) // 定義Windows下的V操作
typedef HANDLE Semaphore; // 信號(hào)量的Windows原型
HANDLE hThread[N]; // 線程計(jì)數(shù)
Semaphore S[N]; // N根筷子, N個(gè)信號(hào)量
// 對(duì)每個(gè)哲學(xué)家的線程
DWORD WINAPI Philosopher(LPVOID para)
{
添加代碼
}
int main(int argc, char *argv[])
{
DWORD tid;
int i=0;
char sTmp[32];// 初始化信號(hào)量
for (i=0; i {
頁(yè)數(shù):15 字?jǐn)?shù):5066
實(shí)驗(yàn)一、哲學(xué)家就餐問(wèn)題
一、問(wèn)題描述
哲學(xué)家就餐問(wèn)題是有Dijkatra提出并解決的典型同步問(wèn)題。該問(wèn)題描述的是有五個(gè)哲學(xué)家共用一張圓桌,分別坐在周圍的五張椅子上,圓桌上有五個(gè)碗和五只筷子,他們的生活方式是交替的進(jìn)行思考和就餐。平時(shí),一個(gè)哲學(xué)家進(jìn)行思考,饑餓時(shí)便試圖取用其左右最靠近他的筷子,只有在他拿到兩只筷子時(shí)才能進(jìn)餐。進(jìn)餐完,放下筷子繼續(xù)思考。
二、問(wèn)題分析
該問(wèn)題可用記錄型信號(hào)量或者是AND型信號(hào)量解決。
記錄型信號(hào)量解決
經(jīng)分析可知,放在桌子上的筷子是臨界資源,在一段時(shí)間內(nèi)只允許一位哲學(xué)家使用,為了實(shí)現(xiàn)對(duì)筷子的互斥使用,可以用一個(gè)信號(hào)量表示一只筷子,由這五個(gè)信號(hào)量組成信號(hào)量數(shù)組。當(dāng)哲學(xué)家饑餓時(shí)總是先拿其左邊的筷子,成功后,再去拿右邊的筷子,又成功后方可就餐。進(jìn)餐完,又先放下他左邊的筷子,再放下右邊筷子。這個(gè)算法可以保證不會(huì)有兩個(gè)相鄰的哲學(xué)家同時(shí)就餐,但有可能引起死鎖。
AND型信號(hào)量解決
在哲學(xué)家就餐過(guò)程中,要求每個(gè)哲學(xué)家先獲得兩個(gè)臨界資源后方能就餐,這在本質(zhì)上就是AND同步問(wèn)題,故用AND信號(hào)量機(jī)制可獲得最簡(jiǎn)潔的解法。
三、程序偽代碼
#include
#include
#include
#define N 5 /* 哲學(xué)家的個(gè)數(shù) */
#define P(S) WaitForSingleObject(S, INFINITE) // 定義Windows下的P操作
#define V(S) ReleaseSemaphore(S, 1, NULL) // 定義Windows下的V操作
typedef HANDLE Semaphore; // 信號(hào)量的Windows原型
HANDLE hThread[N]; // 線程計(jì)數(shù)
Semaphore S[N]; // N根筷子, N個(gè)信號(hào)量
// 對(duì)每個(gè)哲學(xué)家的線程
DWORD WINAPI Philosopher(LPVOID para)
{
添加代碼
}
int main(int argc, char *argv[])
{
DWORD tid;
int i=0;
char sTmp[32];// 初始化信號(hào)量
for (i=0; i
TA們正在看...
- 集團(tuán)財(cái)務(wù)部門工作總結(jié)范文【5篇】.doc
- 零售藥店?duì)I業(yè)員年終工作總結(jié)【五篇】.doc
- 青少年愛(ài)國(guó)主義教育總結(jié)范文5篇.doc
- 青年員工座談活動(dòng)心得體會(huì).doc
- 青年大學(xué)習(xí)階段總結(jié),“青年大學(xué)習(xí)”主題團(tuán)日活動(dòng)...doc
- 青年教師個(gè)人成長(zhǎng)總結(jié)范文5篇.doc
- 青年教師培養(yǎng)心得總結(jié)范文5篇.doc
- 青年教師培訓(xùn)心得體會(huì)總結(jié)報(bào)告范文5篇.doc
- 青年教師培訓(xùn)心得體會(huì)總結(jié)范文5篇.doc
- 青年教師培訓(xùn)成長(zhǎng)自我總結(jié)范文5篇.doc