亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 16.3 線程死鎖16.txt

?? 網上第一本以TXT格式的VC++深入詳解孫鑫的書.全文全以TXT格式,并每一章節都分了目錄,清晰易讀
?? TXT
字號:
16.3 線程死鎖
有一個哲學家進餐的問題能夠很好地描述線程死鎖。哲學家進餐的問題是這樣的:有t 多位哲學家一
起用餐,但每人只有一支筷子,當然用一支筷子是無法吃食物的。這時,如果有一位哲學家能將他
的那只筷子交出來,讓其他哲學家先吃,之后,再將一雙筷子交回來,這樣,所有哲學家就都能夠
吃到食物了。但是哲學家們考慮問題時想得比較深,他們擔心把筷子交給別人先吃,那么別人吃完
食物之后,不把筷子交回來的話,自己不就吃不到食物了嗎?所以他們都希望其他人先把筷子交出來,
讓自己先吃。然而由于每位哲學家都這樣想,從而導致每位哲學家都不肯交出筷子,于是所有的哲
學家看著滿桌的美食,可就是吃不到。這就是一個線程死鎖的實例。
對多線程為說,如果線程1擁有了臨界區對象A,等待臨界區對象B的擁有權,線程 2擁有了臨界區對
象B,等待臨界區對象A的擁有權,這就造成了死鎖。下面通過代碼來演示線程死鎖的發生。我們在
已有的Critical程序上進行修改,結果如例 16-5所示。 
例J 16-5 
#include <Windows . h> 
#inc	lude <iostream.h> 
DWORD WINAPI Fun1Proc( LPVOID lpParameter 11 thread data 
DWORD WINAPI Fun2Proc( 
LPVOID lpParameter 11 thread data 
int tickets=100; 
CRITICAL_SECTION g_csA; 
CRITICAL_SECTION g_csB; 
void main() 
HANDLE hThread1;
HANDLE hThread2; 
hThread1=CreateThread(NULL , 0, Fun1Proc , NULL , 0, NULL); 
hThread2=CreateThread(NULL, 0 , Fun2Proc , NULL , 0 , NULL); 
CloseHandle(hThread1); 
CloseHandle(hThread2); 

InitializeCriticalSection(&g_csA); 
InitializeCriticalSection(&g_csB); ; 
Sleep(4000); 
 
DeleteCriticalSection(&g_csA); 

DeleteCriticalSection(&g_csB); 


DWORD WINAPI Fun1Proc( LPVOID lpParameter // thread data 
while (TRUE) 
EnterCriticalSection(&g_csA); 
Sleep(1); 
EnterCriticalSection(&g_csB); 
if(tickets>0) 

Sleep(1); 
cout<<"threadl sell ticket : "<<tickets--<<endl; 
LeaveCriticalSection(&g_csB); 
LeaveCriticalSection(&g_csA); 

} 
else 
{
LeaveCriticalSection(&csa);
LeaveCriticalSection(&csb);
break;
}
}
cout<<"fun1proc is running"<<endl;
return 0; 

DWORD WINAPI Fun2Proc( LPVOID lpPararneter // thread data 
while (TRUE) 
EnterCriticalSection(&g_csB); 
Sleep (1) ; 
EnterCriticalSection(&g_csA); 
if(tickets>0) 

{ 
Sleep (1) ; 
cout<<"thread2 sell ticket : "<<tickets--<<endl; 
LeaveCriticalSection(&g_csA) ; 
LeaveCriticalSection(&g_csB) ; 

else 
LeaveCriticalSection(&g一cSA) ; 
LeaveCriticalSection(&g_csB); 
break; ' 

cout<<"thread2 is running!"<<endl; 
return 0; 

首先,上述例 16-5所示代碼創建了兩個臨界區對象 :G_csA和 g_csB。在程序中,如果需要對某一種
資源進行保護的話,就可以構建一個臨界區對象。這與現實生活中的情況是一樣的,例如如果在程
序中想要保護電話這種資源的話,那就構建一個臨界區對象來實現,就好像建立一個電話亭一樣:
如果在程序中還想訪問自動柜員機這種資源的話,就可以再創建一個臨界區對象,對自動柜員機這
種資源進行保護。
接著,上述例 16-5所示代碼在 main函數中,調用 InitializeCriticalSection函數對新創建的兩
個臨界區對象 G_csA和 G_csB都進行了初始化,并在程序退出前調用 DeleteCritical Section函數釋
放這兩個臨界區對象(已經沒有任何線程擁有它們了)的所有資源。
然后,在線程 1中調用 EnterCriticalSection函數先請求臨界區對象: g_csA的所有權,當得到該
所有權后,再去請求臨界區對象 =ιcsB的所有權。當線程 1訪問完保護的資源后,調用
LeaveCriticalSection函數釋放兩個臨界區對象的所有權。注意 z因為調用 LeaveCriticalSection
函數時,該函數會立即返回,并不會導致線程等待,所以釋放臨界區對象所有權的順序是無所謂的。
對線程 2來說,官先請求臨界區對象 g_csB的所有權,然后再去等待臨界區對象 ιcsA的所有權。在
訪問完保護的資源之后,釋放所有臨界區對象的所有權。 
下面,我們來分析上述程序的執行過程。當線程 1得到臨界區對象 g_csA的所有權之后,調用 Sleep
函數,該線程將睡眠 lms,放棄執行機會。于是,操作系統會選擇線程 2執行,該線程首先等待的
是臨界區對象 g_csB的所有權,當它得到該所有權之后,調用 Sleep函數,讓線程 2也睡眠 lms。
于是,輪到線程 1執行,這時它需要等待臨界區對象 ιcsB的所有權。然而這時臨界區對象 g_csB己
經被線程 2所擁有,因此線程 l就會等待。當線程 1等待時,線程 2開始執行,這時它需要等待臨
界區對象 ιcsA的所有權。然而臨界區對象 ιcsA的所有權己經被線程 1所擁有,因此線程 2也進入
等待狀態。這樣就導致線程 1和線程 2都在等待對方交出臨界區對象的所有權,于是就造成了死鎖。
我們可以運行這時的 CriticaJ程序,將會看到如圖 16.4所示的結果。可以看到,線程 l和線程 2
都沒有執行關鍵代碼段中的代碼,說明它們都沒有得到所需的臨界區對象的所有權。

圖 16 .4線程死鎖結果

因此在利用多線程技術編寫程序的過程中,在實現線程同步時一定要多加注意,應避免發生線程死
鎖。 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆91在线播放| 五月激情六月综合| 26uuu亚洲| 欧美大片在线观看| 日韩午夜av一区| 日韩精品一区二区三区在线观看| 91精品国产综合久久福利| 欧美肥胖老妇做爰| 欧美年轻男男videosbes| 91精品国产乱码久久蜜臀| 91精品欧美一区二区三区综合在| 777xxx欧美| 欧美精品一区二区在线播放| 2014亚洲片线观看视频免费| 中文字幕av一区二区三区高| 国产精品婷婷午夜在线观看| 中文字幕在线观看一区| 亚洲欧美国产77777| 亚洲麻豆国产自偷在线| 午夜激情一区二区三区| 激情综合网激情| 成人伦理片在线| 欧美色成人综合| 精品国产乱码久久久久久老虎 | 中文字幕不卡在线播放| 中文字幕在线观看不卡| 偷拍与自拍一区| 激情国产一区二区| 94色蜜桃网一区二区三区| 精品污污网站免费看| 精品99999| 一区二区三区精品视频在线| 日本免费在线视频不卡一不卡二 | 国产精品99久久久久| av不卡免费在线观看| 欧美精品久久一区二区三区| 精品区一区二区| 亚洲色图制服诱惑| 美女任你摸久久| 色婷婷国产精品| 久久综合资源网| 亚洲一区二区欧美激情| 国产精品白丝av| 欧美三级电影在线看| 国产精品亲子伦对白| 免费在线观看视频一区| 91黄色免费观看| 精品成人在线观看| 亚洲大尺度视频在线观看| 国产91在线|亚洲| 欧美一区二区黄| 亚洲免费看黄网站| 成人午夜视频免费看| 日韩一区二区精品在线观看| 一区二区三区中文字幕| 国产精品一区二区久久精品爱涩 | 亚洲欧美怡红院| 国产乱码一区二区三区| 717成人午夜免费福利电影| 亚洲日本青草视频在线怡红院| 久久草av在线| 日韩欧美国产一区在线观看| 亚洲v精品v日韩v欧美v专区| 99久久精品免费观看| 久久精品亚洲麻豆av一区二区| 男人操女人的视频在线观看欧美 | 91精品国产91热久久久做人人| 综合自拍亚洲综合图不卡区| 成人激情免费网站| 久久九九久精品国产免费直播| 日韩avvvv在线播放| 欧美精品日韩精品| 水蜜桃久久夜色精品一区的特点| 91麻豆福利精品推荐| 亚洲欧美综合色| 色综合久久综合| 一区二区三区精品| 欧美主播一区二区三区| 亚洲成av人片在线观看无码| 欧美日韩国产小视频| 天堂蜜桃91精品| 欧美高清精品3d| 青青青爽久久午夜综合久久午夜| 欧美日韩一区成人| 天使萌一区二区三区免费观看| 欧美日韩激情一区二区| 日韩国产一区二| 日韩精品一区二区三区三区免费| 激情综合五月婷婷| 国产精品网站在线播放| 色综合色综合色综合| 亚洲成人777| 日韩精品一区在线| 成人美女在线视频| 亚洲一区二区三区在线播放| 欧美乱妇一区二区三区不卡视频| 蜜桃视频第一区免费观看| 国产亚洲精品bt天堂精选| fc2成人免费人成在线观看播放 | 性感美女极品91精品| 日韩亚洲欧美中文三级| 国产99一区视频免费| 亚洲精品美腿丝袜| 欧美一级一级性生活免费录像| 国内外精品视频| 亚洲人成网站精品片在线观看| 精品视频在线免费看| 精品系列免费在线观看| 1000部国产精品成人观看| 4438成人网| 99久精品国产| 久久精品999| 一区二区三区国产精华| ww亚洲ww在线观看国产| 在线观看91视频| 国产乱妇无码大片在线观看| 亚洲午夜av在线| 欧美极品少妇xxxxⅹ高跟鞋| 精品视频免费看| 成人激情免费视频| 久久99蜜桃精品| 亚洲成人tv网| 自拍偷拍欧美激情| 久久综合狠狠综合久久综合88| 欧美视频第二页| 99久久精品国产毛片| 国内欧美视频一区二区| 午夜av区久久| 一区二区成人在线观看| 久久久久久久av麻豆果冻| 欧美剧情电影在线观看完整版免费励志电影 | k8久久久一区二区三区| 欧美a级理论片| 亚洲成人精品影院| 综合分类小说区另类春色亚洲小说欧美| 在线播放国产精品二区一二区四区| 国产乱人伦偷精品视频免下载| 日韩精品成人一区二区在线| 亚洲精品videosex极品| 国产精品久久久久婷婷二区次| 精品国产免费久久| 欧美不卡视频一区| 欧美电影免费提供在线观看| 欧美日韩精品一区二区三区蜜桃| 色老汉一区二区三区| 成人免费av在线| 成人99免费视频| av高清不卡在线| 99视频一区二区三区| 国产成人精品亚洲午夜麻豆| 国模大尺度一区二区三区| 精品中文字幕一区二区小辣椒| 日韩电影在线一区二区| 日本最新不卡在线| 麻豆视频观看网址久久| 麻豆国产欧美日韩综合精品二区 | 亚洲欧洲一区二区三区| 中文字幕一区在线观看| 日韩美女久久久| 亚洲免费av在线| 亚洲一区二区三区国产| 亚洲h精品动漫在线观看| 午夜在线电影亚洲一区| 日韩中文字幕不卡| 国产又粗又猛又爽又黄91精品| 激情综合网av| 从欧美一区二区三区| 91污在线观看| 欧美三级日韩三级| 日韩欧美色电影| 国产三级精品视频| 亚洲精品写真福利| 日本aⅴ精品一区二区三区 | 国产精品国产三级国产普通话三级| 国产精品久久久久久亚洲毛片 | 在线视频一区二区免费| 欧美电影在线免费观看| 欧美va天堂va视频va在线| 日本一区二区三区四区| 自拍偷自拍亚洲精品播放| 同产精品九九九| 国产成人av电影| 欧美在线影院一区二区| 日韩欧美不卡在线观看视频| 国产精品美女一区二区在线观看| 亚洲女子a中天字幕| 久久精品国产一区二区| 91在线免费视频观看| 欧美老人xxxx18| 国产精品美女久久久久久| 亚洲午夜久久久久久久久电影院| 久久不见久久见中文字幕免费| 99精品欧美一区二区蜜桃免费 | 亚洲三级在线免费观看| 日韩精品乱码av一区二区| 成人综合婷婷国产精品久久| 欧美日韩综合在线免费观看| 国产亚洲制服色| 麻豆免费看一区二区三区| 色一区在线观看|