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

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

?? mutex.c

?? 計算機操作系統中解決哲學家吃飯的問題的VC++實現。
?? C
字號:
/*
 * Mutex.c
 *
 * Sample code for "Multithreading Applications in Win32"
 * This sample is discussed in Chapter 4.
 *
 * Graphically demonstrates the problem of the
 * dining philosophers.
 *
 * This version uses mutexes with WaitForSingleObject(),
 * which can cause deadlock, and WaitForMultipleObjects(),
 * which always works properly.
 */

#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#include "MtVerify.h"
#include "dining.h"


int PASCAL WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
BOOL InitApplication(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);

extern HWND   hWndMain;			// Main Window Handle                             
extern BOOL bWaitMultiple;
extern BOOL bFastFood;

#define P_DELAY		bFastFood ? rand()/25 : ((rand()%5)+1)*1000 /*控制進程時間*/

int gDinerState[PHILOSOPHERS];
int gChopstickState[PHILOSOPHERS];

HANDLE gchopStick[PHILOSOPHERS];	/* 1 chopstick between each philopher and his neighbor*/

#undef PostMessage
#define PostMessage SendMessage


/*本函數實現了死鎖與不死鎖兩種狀態
區別僅在調用WaitForMultipleObjects()WaitForSingleObjects()函數
調用WaitForMultipleObjects,哲學家線程需要等待左右筷子,若僅有一邊筷子
則不占有,繼續等待,直到有一雙筷子才占據
調用WaitForSingleObjects,哲學家線程先等待左邊筷子,占有后,再等待右邊筷子
因而容易造成死鎖
*/
  DWORD WINAPI PhilosopherThread(LPVOID pVoid)
{
	HANDLE myChopsticks[2];
	int iPhilosopher = (int) pVoid;	
	int iLeftChopstick = iPhilosopher;
	int iRightChopstick = iLeftChopstick + 1;
	DWORD result;

	if (iRightChopstick > PHILOSOPHERS-1)  //筷子編號過了5就使它為0
		iRightChopstick = 0;

    //Randomize the random number generator
	srand( (unsigned)time( NULL ) * (iPhilosopher + 1) );//????????????????????????????????

	// remember handles for my chopsticks
	myChopsticks[0] = gchopStick[iLeftChopstick];      //定義哲學家的左右筷子
	myChopsticks[1] = gchopStick[iRightChopstick];	

	gDinerState[iPhilosopher] = RESTING;	//wants chopsticks
    Sleep(P_DELAY);

	for(;;)
	{
		if (bWaitMultiple == FALSE)	//into deadlock state
		{
			// Wait until both of my chopsticks are available
			gDinerState[iPhilosopher] = WAITING;	//wants chopsticks
            PostMessage(hWndMain, WM_FORCE_REPAINT,0 ,0); 
			result = WaitForSingleObject(gchopStick[iLeftChopstick], INFINITE);	//just wait for leftchopstick
			MTVERIFY(result == WAIT_OBJECT_0);
			gChopstickState[iLeftChopstick] = iPhilosopher;	//標示左筷子已被占有
			Sleep(P_DELAY/4);

			gDinerState[iPhilosopher] = WAITING;	//wants chopsticks
            PostMessage(hWndMain, WM_FORCE_REPAINT,0 ,0);
			result = WaitForSingleObject(gchopStick[iRightChopstick], INFINITE);
			MTVERIFY(result == WAIT_OBJECT_0);
			gChopstickState[iRightChopstick] = iPhilosopher;	//占據右筷子
		}
		else		//never into deadlock state
		{
			// Wait until both of my chopsticks are available
			gDinerState[iPhilosopher] = WAITING;	//wants chopsticks
			PostMessage(hWndMain, WM_FORCE_REPAINT,0 ,0);
			result = WaitForMultipleObjects(2, myChopsticks, TRUE, INFINITE);	//一直等待直到myChopsticks都具備
			MTVERIFY(result >= WAIT_OBJECT_0 && result < WAIT_OBJECT_0 + 2);
			gChopstickState[iLeftChopstick] = iPhilosopher;
			gChopstickState[iRightChopstick] = iPhilosopher;
		}

		// Philosopher can now eat a grain of rice
		gDinerState[iPhilosopher] = EATING;	//philosopher is eating
		PostMessage(hWndMain, WM_FORCE_REPAINT,0 ,0);
        Sleep(P_DELAY);

		// Put down chopsticks
		gDinerState[iPhilosopher] = RESTING;	//philosopher is resting
		gChopstickState[iRightChopstick] = UNUSED;
		gChopstickState[iLeftChopstick] = UNUSED;
		PostMessage(hWndMain, WM_FORCE_REPAINT,0 ,0);
		MTVERIFY( ReleaseMutex(gchopStick[iLeftChopstick]) ); //釋放筷子資源
		MTVERIFY( ReleaseMutex(gchopStick[iRightChopstick]) );

		// Philosopher can now meditate
        Sleep(P_DELAY);

	} // end for

	return 0;
}

int Diner(void)
{
	HANDLE hThread[PHILOSOPHERS];
	DWORD dwThreadId;
	int i;

	for (i=0; i < PHILOSOPHERS; i++)
	{
		//Initialize the chopsitcks to unused
		gChopstickState[i] = UNUSED;
		// initialize the diner state table
		gDinerState[i] = 0;
		// The Philosophers prepare to eat
		//HANDLE CreateMutex(
  		//LPSECURITY_ATTRIBUTES lpMutexAttributes,  // SD
  		//BOOL bInitialOwner,                       // initial owner
  		//LPCTSTR lpName                            // object name
			//);

		gchopStick[i] = CreateMutex(NULL, FALSE, NULL); //create non-named mutex in gchopStick
		
		MTVERIFY(gchopStick[i] != NULL);	//if creatrmutex fails,print error
	}

	for (i = 0; i < PHILOSOPHERS; i++)
		
//parameter0--0:the handle cannot be inherited.
//parameter1--null:the new thread uses the default size for the executable
//parameter4--0: the thread runs immediately after creation
//parameter5	:the variable that receives the thread identifier. 
	
		MTVERIFY( hThread[i] = CreateThread(NULL, 0, PhilosopherThread, (LPVOID) i, 0, &dwThreadId ));//啟動進程

	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品国产导航| 国产99久久久国产精品免费看 | 日韩一级在线观看| 国产女主播一区| 午夜精品久久久久| aaa亚洲精品| 久久久久久久久免费| 视频一区二区三区在线| 91在线国产福利| 久久综合中文字幕| 污片在线观看一区二区| 色哦色哦哦色天天综合| 亚洲国产电影在线观看| 日本视频中文字幕一区二区三区| 91首页免费视频| 国产精品嫩草影院com| 九九国产精品视频| 欧美一区二区性放荡片| 亚洲线精品一区二区三区八戒| 国产99一区视频免费| 欧美成人video| 奇米精品一区二区三区在线观看| 欧美色爱综合网| 亚洲精品国产无天堂网2021| 99精品视频一区| 中文字幕av免费专区久久| 国产综合久久久久影院| 精品日韩在线观看| 久久精品理论片| 精品免费日韩av| 久久狠狠亚洲综合| 日韩欧美成人激情| 精品一二三四区| 2022国产精品视频| 国产精品一二三四| 国产片一区二区| www.日韩大片| 一区二区免费看| 欧美亚洲高清一区| 日本女人一区二区三区| 日韩欧美综合在线| 麻豆91免费看| 国产欧美综合在线| 99视频精品在线| 亚洲综合色区另类av| 欧美日韩dvd在线观看| 日韩av在线播放中文字幕| 日韩欧美卡一卡二| 国产盗摄一区二区三区| 中文字幕日韩av资源站| 色婷婷久久久久swag精品| 亚洲成人自拍一区| 日韩精品一区二区三区三区免费| 国产中文字幕精品| 国产精品毛片久久久久久| 在线观看免费一区| 毛片不卡一区二区| 欧美国产精品一区二区三区| 色婷婷久久综合| 久久av老司机精品网站导航| 亚洲国产精品成人综合| 色噜噜狠狠成人中文综合| 日韩国产欧美视频| 国产欧美日本一区二区三区| 在线免费观看日本欧美| 美腿丝袜亚洲一区| 日韩一区在线播放| 91精品一区二区三区久久久久久| 国产精品一区二区黑丝| 一区二区在线免费| 精品91自产拍在线观看一区| 白白色 亚洲乱淫| 日韩vs国产vs欧美| 亚洲日本成人在线观看| 日韩免费观看高清完整版| 91在线视频官网| 国内外成人在线| 亚洲综合视频在线| 中文字幕免费不卡| 日韩精品一区二区三区在线播放| 99国产精品国产精品毛片| 日本成人在线一区| 亚洲伦理在线精品| 久久精品亚洲精品国产欧美| 欧美日本视频在线| 国产福利一区二区三区在线视频| 中文字幕在线不卡一区二区三区| 欧美一级午夜免费电影| 色天使久久综合网天天| 国产传媒日韩欧美成人| 青青青爽久久午夜综合久久午夜| 1000部国产精品成人观看| 精品欧美一区二区久久 | 成人教育av在线| 裸体歌舞表演一区二区| 亚洲成人一二三| 亚洲日本丝袜连裤袜办公室| 国产亚洲一区二区三区| 日韩一区二区电影在线| 精品视频1区2区| 一本久道中文字幕精品亚洲嫩| 成人免费黄色大片| 国产精品小仙女| 经典三级在线一区| 美女国产一区二区三区| 日本视频在线一区| 日韩精品一二三| 丝袜美腿一区二区三区| 亚洲成人免费看| 天天综合天天综合色| 午夜电影一区二区| 亚洲一区二区三区免费视频| 一区二区理论电影在线观看| 一区av在线播放| 亚洲一区二区三区四区不卡| 一级精品视频在线观看宜春院| 亚洲欧洲综合另类在线| 亚洲欧美视频在线观看| 亚洲三级小视频| 一区二区三区国产豹纹内裤在线| 日韩美女视频一区| 亚洲乱码中文字幕| 亚洲线精品一区二区三区| 亚洲福利一区二区| 日韩电影在线观看电影| 日韩av在线发布| 黑人巨大精品欧美黑白配亚洲| 精品无人码麻豆乱码1区2区 | 欧美日韩一级大片网址| 欧美日韩一区不卡| 日韩欧美一级精品久久| 2021中文字幕一区亚洲| 国产精品家庭影院| 一区二区三区在线高清| 日韩极品在线观看| 韩国女主播成人在线| 成人动漫视频在线| 欧美性xxxxx极品少妇| 欧美一区二区三区在线观看视频| 欧美成人伊人久久综合网| 国产日产欧美精品一区二区三区| 亚洲视频一区二区免费在线观看| 亚洲综合区在线| 理论片日本一区| eeuss鲁一区二区三区| 欧美日韩中文字幕精品| 激情综合网av| 精品一区二区三区香蕉蜜桃| 99热在这里有精品免费| 老鸭窝一区二区久久精品| 国产不卡视频在线播放| 色哟哟国产精品| 欧美大片在线观看一区二区| 国产欧美一区二区三区网站| 一区2区3区在线看| 国内精品第一页| 欧美性色欧美a在线播放| 精品欧美一区二区久久| 亚洲精品成人悠悠色影视| 久久er精品视频| 欧美性色黄大片| 欧美韩国日本不卡| 日韩成人一区二区三区在线观看| 国产a视频精品免费观看| 欧美日本一区二区三区| 1024精品合集| 国产精一区二区三区| 欧美日韩你懂得| 国产精品色一区二区三区| 视频一区中文字幕国产| 97久久精品人人做人人爽50路| 欧美一区二区在线播放| 一区二区三区高清在线| 国产麻豆视频精品| 欧美一级日韩免费不卡| 一区二区激情小说| www.视频一区| 国产拍揄自揄精品视频麻豆| 美女精品一区二区| 欧美日本精品一区二区三区| 亚洲欧美日本韩国| 成人美女视频在线看| 26uuu久久综合| 蜜臀久久久99精品久久久久久| 欧美性高清videossexo| 亚洲欧美日韩成人高清在线一区| 中文字幕一区二区三| 色一情一伦一子一伦一区| 亚洲大型综合色站| 91视频免费播放| 国产精品丝袜黑色高跟| 国产精品一区一区三区| 欧美r级在线观看| 日欧美一区二区| 欧美精品在线观看一区二区| 亚洲尤物视频在线| 欧美日韩日本视频| 视频一区二区三区在线| 91精品婷婷国产综合久久竹菊| 亚洲动漫第一页|