操作系統(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í)便試圖取用其左右最靠近他...
內(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們正在看...
- 施工培訓(xùn)教材地?zé)岬匕迦绾武佈b.doc
- 施工培訓(xùn)教材地?zé)岬匕灏惭b四要點(diǎn).doc
- 施工培訓(xùn)教材實(shí)木地板擱柵施工技巧.doc
- 施工培訓(xùn)教材實(shí)木地板的施工與安裝.doc
- 施工培訓(xùn)教材實(shí)木地板的施工和安裝經(jīng)驗(yàn)談.doc
- 施工培訓(xùn)教材石材墻面干掛施工工藝.doc
- 施工培訓(xùn)教材石柱加工工藝技術(shù).doc
- 施工培訓(xùn)教材石膏吊頂?shù)闹R(shí)和施工工藝.doc
- 施工工藝為什么家庭裝修大多選擇復(fù)合地板.doc
- 施工工藝五行相生相克.doc