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

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

?? 源代碼.txt

?? 操作系統實驗
?? TXT
字號:
#include <windows.h>
#include <conio.h> 
#include "fstream.h" 
#include <stdio.h>


int read_count=0;          //記錄讀者數目,開始為0
int write_count=0;         //記錄寫者數目,開始為0

CRITICAL_SECTION RP_Write; //臨界資源區
CRITICAL_SECTION cs_Write;
CRITICAL_SECTION cs_Read;
struct ProcessInfo               //線程信息
{	int Process_serial_number;              //線程序號
	double Process_Delay;       //線程讀/寫持續時間
	double Process_Start;     //線程開始時間
	char ProcessClass;           //判斷線程是讀者還是寫者(即線程類別)
};
void R_Fun(char* file);//讀者優先函數	
void R_ReaderProcess(void *p);//處理讀者優先讀者線程
void R_WriterProcess(void *p);//處理讀者優先寫者線程
void W_Fun(char* file);  //寫者優先函數
void W_ReaderProcess(void *p);//處理寫者優先讀者線程
void W_WriterProcess(void *p);//處理寫者優先寫者線程
int main()   //進程主函數
{
	char select;
	while (true)
	{
		printf("★★★★★★★★★★★★驗證實現讀者-寫者問題★★★★★★★★★★★★\n");
		printf("\n");
		printf("               a:執行讀者優先\n");
		printf("\n");
		printf("               b:執行寫者優先\n");
		printf("\n");
		printf("               c:關閉本窗口\n");
		printf("\n");
        printf("  根據提示選擇要進行的操作:");

    	do
		{
			cin>>select;
			if(select!='a' && select!='b' && select!='c')
				printf("\n 輸入錯誤,務必選擇a/b/c中的一個字母!");

		}while (select!='a' && select!='b' && select!='c');
		system("cls");
		if (select=='c')
			return 0;//關閉本窗口
		else if (select=='a')    //運行讀者優先函數
				R_Fun("yanzheng.txt");
			 else if(select=='b')    //運行寫者優先函數
			    W_Fun("yanzheng.txt");
			 printf("\n  是否還要繼續?   1. 繼續(返回主窗口)   2.退出(關閉該程序)");

		do
		{
			cin>>select;
			if(select!='1' && select!='2' )
				printf("\n 輸入錯誤,務必輸入1/2中的一項!");

		}while (select!='1' && select!='2');
		if(select=='2')
			return 0;//	退出(關閉程序)
		system("cls");
	}
	return 0;
}

//以下為讀者優先函數
void R_Fun(char* file)
{
	DWORD Process_ID;         //線程ID
	DWORD waiting_for_all_process;      //等待所有線程結束
	DWORD Processnumber=0;        //定義線程數初值為0    
	//臨界資源
	HANDLE h_Mutex;        
	//互斥對象(h_Mutex)確保線程擁有對單個資源的互斥訪問權
	h_Mutex=CreateMutex(NULL,FALSE,"mutex_for_read_count");
	HANDLE h_process[64];	//線程對象數組,最大64
	ProcessInfo process_info[64];
	read_count=0;     
	InitializeCriticalSection(&RP_Write);  //初始化臨界區
	ifstream inFile;
	inFile.open(file); 
	printf("       讀者優先  運行過程:\n");
    printf("\n");
	while (inFile)
	{//讀入每一個讀者/寫者的信息
	inFile>>process_info[Processnumber].Process_serial_number
    >>process_info[Processnumber].ProcessClass
	>>process_info[Processnumber].Process_Start
    >>process_info[Processnumber].Process_Delay;
		if (-1 == inFile.get())
			break;
		Processnumber++;//線程數自加
	}
	for (int i=0;i<(int)(Processnumber);i++)
	{
		if (process_info[i].ProcessClass=='r')   //創建讀者線程
			
			h_process[i]=CreateThread(NULL,0,\
			(LPTHREAD_START_ROUTINE)(R_ReaderProcess),\
			&process_info[i],0,&Process_ID);
		else                                    //創建寫者線程
			
			h_process[i]=CreateThread(NULL,0,\
			(LPTHREAD_START_ROUTINE)(R_WriterProcess),\
			&process_info[i],0,&Process_ID);
	}
	waiting_for_all_process=WaitForMultipleObjects(Processnumber,h_process,TRUE,-1);
	printf("\n");
    printf("  已完成所有讀者和寫者線程操作,請根據提示繼續操作 \n");

}
//以下為讀者優先--讀者線程
void R_ReaderProcess(void *p)
{
	//互斥變量
	HANDLE h_Mutex;
	h_Mutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex_for_read_count");
	DWORD m_delay_time;          //延遲時間
	DWORD m_Process__Delay;        //讀操作持續時間
	DWORD waiting_for_mutex;   //等待互斥變量所有權
	int m_Process_serial_number;           //線程序號
	m_Process_serial_number=((ProcessInfo *)(p))->Process_serial_number;
	m_delay_time=(DWORD)(((ProcessInfo *)(p))->Process_Start*100);
	m_Process__Delay=(DWORD)(((ProcessInfo *)(p))->Process_Delay*100);
	Sleep(m_delay_time);                                   //延遲等待
	printf("讀者 %d  發出讀請求.\n",m_Process_serial_number);

//等待互斥對象通知
	waiting_for_mutex=WaitForSingleObject(h_Mutex,-1);   //等待互斥信號,保證對read_count的訪問、
													  //修改互斥
	read_count++;                                      //讀者數目加一
	if (read_count==1)
		EnterCriticalSection(&RP_Write);//禁止寫者進入	          
	ReleaseMutex(h_Mutex);//釋放互斥對象,允許下個讀者繼續讀:
	//讀操作
	printf("讀者 %d  開始讀操作.\n",m_Process_serial_number);

	Sleep(m_Process__Delay);
	//退出線程
	printf("讀者 %d  完成讀操作.\n",m_Process_serial_number);
	
	waiting_for_mutex=WaitForSingleObject(h_Mutex,-1);  //等待互斥信號,保證對read_count的訪問、修改互斥
	read_count--;                                     //讀者數目減少
	if (read_count==0)
		LeaveCriticalSection(&RP_Write);	         //如果所有讀者讀完,喚醒寫者
	ReleaseMutex(h_Mutex);//釋放互斥信號
}
//以下為讀者優先--寫者線程
void R_WriterProcess(void *p)
{
	int m_Process_serial_number;        //線程序號
	DWORD m_delay_time;          //延遲時間
	DWORD m_Process__Delay;  //讀操作持續時間
	
	//從參數中獲得信息
	m_Process_serial_number=((ProcessInfo *)(p))->Process_serial_number;
	m_delay_time=(DWORD)(((ProcessInfo *)(p))->Process_Start*100);
	m_Process__Delay=(DWORD)(((ProcessInfo *)(p))->Process_Delay*100);
	Sleep(m_delay_time);                                   //延遲等待
	printf("寫者 %d  發出寫請求.\n",m_Process_serial_number);

	EnterCriticalSection(&RP_Write);//禁止下一位寫者進入
	//寫操作
	printf("寫者 %d  開始寫操作.\n",m_Process_serial_number);

	Sleep(m_Process__Delay);
	//退出線程
    printf("寫者 %d  完成寫操作.\n",m_Process_serial_number);
	LeaveCriticalSection(&RP_Write);	//如果所有讀者讀完,喚醒寫者
}
//以下為寫者優先處理函數
void W_Fun(char* file)
{
	DWORD Process_ID;         //線程ID
	DWORD Processnumber=0;        //線程數目
	DWORD waiting_for_all_process;      //等待所有線程結束
	//互斥對象
	HANDLE h_Mutex1, h_Mutex2, h_Mutex3;
	h_Mutex1 = CreateMutex(NULL, FALSE, "mutex_for_write_count");
	h_Mutex2 = CreateMutex(NULL, FALSE, "mutex_for_read_count");
	h_Mutex3 = CreateMutex(NULL, FALSE, "mutex_for_read");
	//線程對象數組
	HANDLE h_process[64];
	ProcessInfo process_info[64];
	read_count=0;     //初始化read_count
	InitializeCriticalSection(&cs_Write);  //初始化臨界區
	InitializeCriticalSection(&cs_Read);
	ifstream inFile;
	inFile.open(file);                     //打開操作
	printf("       寫者優先  運行過程:\n");
    printf("\n");
	while (inFile)
	{//讀入每一個讀者、寫者的信息		
		inFile>>process_info[Processnumber].Process_serial_number
    >>process_info[Processnumber].ProcessClass
	>>process_info[Processnumber].Process_Start
    >>process_info[Processnumber].Process_Delay;
	if(-1 == inFile.get())
			break;
		Processnumber++;//線程數自加
	}
	for (int i=0;i<(int)(Processnumber);i++)
	{
		if (process_info[i].ProcessClass=='r')
			//創建讀者線程
			h_process[i]=CreateThread(NULL,0,\
			(LPTHREAD_START_ROUTINE)(W_ReaderProcess),\
			&process_info[i],0,&Process_ID);
		else
			//創建寫者線程
			h_process[i]=CreateThread(NULL,0,\
			(LPTHREAD_START_ROUTINE)(W_WriterProcess),\
			&process_info[i],0,&Process_ID);
	}
	//等待所有線程結束
	waiting_for_all_process=WaitForMultipleObjects(Processnumber,h_process,TRUE,-1);
	printf("\n");
    printf("  已完成所有讀者和寫者線程操作,根據提示繼續操作!");

}
//以下為寫者優先--寫者線程
void W_WriterProcess(void *p)
{
	//互斥變量
	HANDLE h_Mutex1;
	h_Mutex1 = OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex_for_write_count");
	int m_Process_serial_number;           //線程序號
	DWORD m_delay_time;          //延遲時間
	DWORD m_Process__Delay;        //讀操作持時續間
	DWORD waiting_for_mutex;   //等待互斥變量所有權
	m_Process_serial_number=((ProcessInfo *)(p))->Process_serial_number;
	m_delay_time=(DWORD)(((ProcessInfo *)(p))->Process_Start*100);//每秒時鐘中斷100次
	m_Process__Delay=(DWORD)(((ProcessInfo *)(p))->Process_Delay*100);	Sleep(m_delay_time);   
	printf("寫者 %d  發出寫請求.\n",m_Process_serial_number);

	waiting_for_mutex=WaitForSingleObject(h_Mutex1,-1);  
	write_count++;
	if (write_count==1)
		EnterCriticalSection(&cs_Read);
	ReleaseMutex(h_Mutex1);
	EnterCriticalSection(&cs_Write);
	printf("寫者 %d  開始寫操作.\n",m_Process_serial_number);

	Sleep(m_Process__Delay);
    printf("寫者 %d  完成寫操作.\n",m_Process_serial_number);
	LeaveCriticalSection(&cs_Write);
	waiting_for_mutex=WaitForSingleObject(h_Mutex1,-1);  
	write_count--;
	if(write_count == 0)
		LeaveCriticalSection(&cs_Read);
	ReleaseMutex(h_Mutex1);
}
//以下為寫者優先--讀者線程
void W_ReaderProcess(void *p)
{
	HANDLE h_Mutex2, h_Mutex3;
	h_Mutex2 = OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex_for_read_count");
	h_Mutex3 = OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex_for_read");
	DWORD waiting_for_mutex, waiting_for_mutex1; 
//等待互斥變量所有權
	DWORD m_delay_time;          //延遲時間
	DWORD m_Process__Delay;        //讀操作持續時間
	int m_Process_serial_number;           //線程序號
	m_Process_serial_number=((ProcessInfo *)(p))->Process_serial_number;
	m_delay_time=(DWORD)(((ProcessInfo *)(p))->Process_Start*100);
	m_Process__Delay=(DWORD)(((ProcessInfo *)(p))->Process_Delay*100);
	Sleep(m_delay_time);
    printf("讀者 %d  發出讀請求.\n",m_Process_serial_number);
	waiting_for_mutex1=WaitForSingleObject(h_Mutex3,-1);
	EnterCriticalSection(&cs_Read);
	LeaveCriticalSection(&cs_Read);
	ReleaseMutex(h_Mutex3);
	waiting_for_mutex=WaitForSingleObject(h_Mutex2,-1); 
	read_count++;
	if (read_count == 1)
		EnterCriticalSection(&cs_Write);
	ReleaseMutex(h_Mutex2);
    printf("讀者 %d  開始讀操作.\n",m_Process_serial_number);

	Sleep(m_Process__Delay);

    printf("讀者 %d  完成讀操作.\n",m_Process_serial_number);
	waiting_for_mutex=WaitForSingleObject(h_Mutex2,-1);
	read_count--;
	if (read_count == 0)
		LeaveCriticalSection(&cs_Write);
	ReleaseMutex(h_Mutex2);
} //結束

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人性视频免费网站| 天天影视涩香欲综合网 | 蜜桃av一区二区| 91超碰这里只有精品国产| 午夜视频在线观看一区二区| 日本福利一区二区| 日韩主播视频在线| 精品国产一区二区三区忘忧草| 国产精品18久久久久久久久久久久 | 成人av在线播放网站| 中文字幕亚洲欧美在线不卡| 日本韩国精品一区二区在线观看| 精品一区二区在线视频| 国产欧美日韩在线视频| 91色在线porny| 天天综合色天天综合色h| 精品久久久久久久人人人人传媒| 国产69精品久久99不卡| 亚洲一区在线观看免费观看电影高清| 欧美男生操女生| 国产v综合v亚洲欧| 亚洲一区二区三区美女| 欧美成人免费网站| 91在线你懂得| 老司机午夜精品99久久| 亚洲天堂网中文字| 日韩欧美国产一区二区在线播放 | 五月天网站亚洲| 久久久亚洲精品一区二区三区| 成人免费毛片aaaaa**| 亚洲国产日韩a在线播放性色| 精品国产电影一区二区| 一本大道av一区二区在线播放| 婷婷久久综合九色综合伊人色| 久久综合狠狠综合久久综合88| 色综合久久88色综合天天| 韩国一区二区三区| 亚洲一区二区三区三| 国产欧美一区二区三区鸳鸯浴| 欧美视频一区二区三区四区 | 亚洲免费在线视频一区 二区| 91精品久久久久久久91蜜桃| 成人av资源在线| 免费人成精品欧美精品| 亚洲欧美日韩在线不卡| 国产亚洲午夜高清国产拍精品| 欧美日精品一区视频| 波多野结衣在线一区| 视频一区视频二区在线观看| 亚洲欧美一区二区久久| 久久久国产精华| 日韩限制级电影在线观看| 色狠狠一区二区三区香蕉| 国产精品77777竹菊影视小说| 日产精品久久久久久久性色| 亚洲欧美另类图片小说| 国产精品护士白丝一区av| 2024国产精品| 日韩女优电影在线观看| 欧美一区二区三区免费视频| 在线观看三级视频欧美| 99re成人精品视频| 国产不卡在线播放| 国产一区二区三区在线看麻豆| 三级不卡在线观看| 亚洲国产精品久久久男人的天堂| 中文字幕一区二区视频| 国产清纯美女被跳蛋高潮一区二区久久w| 91麻豆精品久久久久蜜臀| 欧美亚洲综合另类| 91久久精品日日躁夜夜躁欧美| 色综合久久九月婷婷色综合| 成人美女视频在线看| 成人av电影在线| 成人av动漫在线| 成人黄色电影在线 | 亚洲欧美欧美一区二区三区| 国产精品狼人久久影院观看方式| 久久久精品国产免大香伊| 久久先锋影音av鲁色资源网| 久久久久久久免费视频了| 精品女同一区二区| 国产香蕉久久精品综合网| 欧美va在线播放| 日韩视频一区在线观看| 精品福利一区二区三区| 久久综合色婷婷| 中文久久乱码一区二区| 中文字幕亚洲一区二区av在线 | 日韩专区中文字幕一区二区| 日本强好片久久久久久aaa| 免费成人av在线| 国产在线观看免费一区| 国产在线不卡一区| 99久久精品免费| 色狠狠色狠狠综合| 日韩一区二区精品在线观看| 精品国产亚洲一区二区三区在线观看| 国产婷婷一区二区| 一区在线中文字幕| 午夜伊人狠狠久久| 久久国产精品一区二区| 不卡视频免费播放| 欧美在线观看视频一区二区| 欧美一级理论片| 中文字幕av一区二区三区| 一区二区三区精品久久久| 视频一区欧美日韩| 国产成a人亚洲| 欧美日韩日日摸| 久久精品一区二区三区不卡| 伊人婷婷欧美激情| 麻豆专区一区二区三区四区五区| 国产1区2区3区精品美女| 欧美色网站导航| 337p日本欧洲亚洲大胆精品| 亚洲视频网在线直播| 日韩av电影天堂| 色综合久久九月婷婷色综合| 精品精品国产高清a毛片牛牛 | 亚洲国产精品一区二区www在线| 男女男精品视频| k8久久久一区二区三区| 制服丝袜亚洲精品中文字幕| 国产精品视频看| 久久国产精品色婷婷| 色综合色综合色综合色综合色综合 | 国产精品18久久久久久久久久久久 | 91精品国产麻豆| 国产精品天干天干在线综合| 日韩av中文在线观看| 色综合久久中文字幕| 久久久久88色偷偷免费| 亚洲国产你懂的| caoporen国产精品视频| 精品国内二区三区| 日韩av成人高清| 精品视频在线免费看| 中文字幕亚洲视频| 国产精品一区二区不卡| 9191久久久久久久久久久| 一区二区三区在线视频播放| 成人免费毛片a| 国产视频一区二区三区在线观看| 日韩—二三区免费观看av| 日本道色综合久久| 中文一区二区在线观看| 韩国女主播成人在线观看| 欧美精品久久天天躁| 亚洲一区二区三区四区五区中文| 91在线观看污| 国产精品毛片无遮挡高清| 国产精品一区二区你懂的| 日韩亚洲欧美高清| 免费成人av在线| 欧美美女喷水视频| 亚洲风情在线资源站| 欧洲国产伦久久久久久久| 亚洲欧洲韩国日本视频| 不卡一区在线观看| 综合亚洲深深色噜噜狠狠网站| 国产成人av电影在线观看| 久久久国产精品午夜一区ai换脸| 美女视频黄久久| 欧美电影免费观看完整版| 蜜臀av性久久久久蜜臀av麻豆| 91麻豆精品国产91久久久更新时间| 亚洲小少妇裸体bbw| 欧美手机在线视频| 丝袜诱惑制服诱惑色一区在线观看| 欧美精品自拍偷拍动漫精品| 五月婷婷综合网| 日韩欧美电影一二三| 国产麻豆一精品一av一免费| 国产免费观看久久| 成人动漫在线一区| 亚洲乱码精品一二三四区日韩在线| 色婷婷综合五月| 亚洲精选视频在线| 欧美日韩一区二区三区在线看| 日韩国产精品久久| 日韩视频一区二区三区| 国产乱码精品1区2区3区| 国产亚洲女人久久久久毛片| 99久久精品免费| 亚洲国产精品久久久久秋霞影院| 欧美久久一区二区| 国产一区在线观看视频| 国产精品天干天干在线综合| 一本色道久久综合亚洲精品按摩| 亚洲一区二区视频在线观看| 5566中文字幕一区二区电影| 韩国女主播一区| 亚洲欧洲av在线| 欧美日韩国产成人在线免费| 韩国一区二区视频| 亚洲人吸女人奶水| 91精品国产高清一区二区三区蜜臀| 国产精品1区2区| 亚洲一区在线视频观看|