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

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

?? procucerconsumer.cpp

?? 簡易地演示操作系統方面的一個重要問題——生產者消費者
?? CPP
字號:
#include "windows.h"
#include <conio.h>
#include <stdlib.h>
#include <fstream.h>

#include <io.h>
#include <string.h>
#include <stdio.h>

#define READER 'R'
#define WRITER 'W'
#define INTE_PER_SEC 1000
#define MAX_THREAD_NUM 64
#define MAX_FILE_NUM   32
#define MAX_STR_LEN    32

int   readcount = 0;
int   writecount = 0;

CRITICAL_SECTION RP_Write;
CRITICAL_SECTION cs_Write;
CRITICAL_SECTION cs_Read;

struct ThreadInfo
{
int     serial;
char    entity;
double 	delay;
double  persist;
};

/////////////////////////////////////////////////////////////////////
// 讀者優先——讀者線程
//P:讀者線程信息

void  RP_ReaderThread(void* p)
{
	
	//互斥變量
    HANDLE h_Mutex;
    // mutex_for_readcount mutex對象名字
    h_Mutex = OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex_for_readcount");

    DWORD wait_for_mutex;
	DWORD m_delay;
	DWORD m_persist;
	int   m_serial;

	//從參數中獲得信息
	m_serial = ((ThreadInfo*)(p))->serial;
	m_delay = (DWORD)(((ThreadInfo*)(p))->delay*INTE_PER_SEC);
	m_persist = (DWORD)(((ThreadInfo*)(p))->persist*INTE_PER_SEC);
	Sleep(m_delay); //延遲等待 

	printf("Reader thread %d sents the reading require.\n",m_serial);
	//等待互斥信號,保證對readcount的訪問 修改互斥

	wait_for_mutex = WaitForSingleObject(h_Mutex,-1);  // 互斥對象, -1:超時時間
	//讀者數目增加
	readcount++;
	if(readcount == 1)
	{
		//第一個讀者, 等待資源
		EnterCriticalSection(&RP_Write);
	}
	ReleaseMutex(h_Mutex);  //釋放互斥信號

	printf("Reader thread %d begins to read file.\n",m_serial);
	Sleep(m_persist); 

	//退出線程
	printf("Reader thread %d finished  reading file.\n",m_serial);
	// 等待互斥信號,保證對readcount的訪問,修改互斥
	wait_for_mutex = WaitForSingleObject(h_Mutex,-1);
	//讀者數目減少
	readcount--;
	if(readcount == 0)
	{
		//如果所有讀者讀完,喚醒寫者
		LeaveCriticalSection(&RP_Write);
	}
	ReleaseMutex(h_Mutex);
}


//////////////////////////////////////////////////////////////////
//讀者優先———寫者進程
//p:寫者線程信息

void RP_WriterThread(void* p)
{
	DWORD m_delay;
	DWORD m_persist;
	int m_serial;

	// 從參數中獲得信息
	m_serial = ((ThreadInfo*)(p))->serial;
	m_delay = (DWORD)(((ThreadInfo*)(p))->delay*INTE_PER_SEC);
	m_persist = (DWORD)(((ThreadInfo*)(p))->persist*INTE_PER_SEC);
	Sleep(m_delay);

	printf("Writer thread %d sents the writing  require.\n",m_serial);
	//等待資源
	EnterCriticalSection(&RP_Write);

	//寫文件
	printf("Writer thread %d begins to write to the file.\n",m_serial);
	Sleep(m_persist);

	//退出線程
	printf("Writer thread %d finishing  writing to the file.\n",m_serial);
	//釋放資源
	LeaveCriticalSection(&RP_Write);
}


/////////////////////////////////////////////////////////
//讀者優先處理函數
// file:文件名
void ReaderPriority(char* file)
{
DWORD n_thread = -1;        //線程數目
DWORD thread_ID;           //線程ID
DWORD wait_for_all;        //等待所有線程結素

//互斥對象
HANDLE h_Mutex;
h_Mutex = CreateMutex(NULL,FALSE,"mutex_for_readcount");

//線程對象的數組
HANDLE h_Thread[MAX_THREAD_NUM];
ThreadInfo thread_info[MAX_THREAD_NUM];

readcount = 0;                              //初始化 readcount
InitializeCriticalSection(&RP_Write);       //初始化臨界區
ifstream inFile;
inFile.open(file);
printf("Reader Priority:\n\n");

//inFile.get();  // Add by BAOyubin
while(inFile)
{
    //讀入每一個讀者,寫者的信息
    inFile>>thread_info[++n_thread].serial;
    inFile>>thread_info[n_thread].entity;
    inFile>>thread_info[n_thread].delay;
    inFile>>thread_info[n_thread].persist;
    inFile.get();
}

for (int i = 0; i < (int) (n_thread); i++)
{
    if (thread_info[i].entity == READER || thread_info[i].entity =='r')
    {       
	      //創建讀者線程
		  h_Thread[i] = CreateThread(NULL,0,
		                            (LPTHREAD_START_ROUTINE)(RP_ReaderThread),
			   			            &thread_info[i],0,&thread_ID);
	}
   else
	{
     //創建寫者線程
	 h_Thread[i] = CreateThread(NULL,0,
	                            (LPTHREAD_START_ROUTINE)(RP_WriterThread),
										    &thread_info[i],
											0,&thread_ID);
	};
};

//等待所有線程結束
wait_for_all = WaitForMultipleObjects(n_thread,h_Thread,TRUE,-1);
printf("ALL reader and writer have finished operating.\n");
}

//////////////////////////////////////////////////////////////////////////////////////////
//寫者優先——讀者線程
//P:讀者線程信息

void WP_ReaderThread(void* p)
{

//互斥變量
HANDLE h_Mutex1;
h_Mutex1 = OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex1");
HANDLE h_Mutex2;
h_Mutex2 = OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex2");

DWORD wait_for_mutex1;
DWORD wait_for_mutex2;
DWORD m_delay;
DWORD m_persist;
int   m_serial;

//從參數中獲得信息
m_serial = ((ThreadInfo*)(p))->serial;
m_delay = (DWORD)(((ThreadInfo*)(p))->delay*INTE_PER_SEC);
m_persist = (DWORD)(((ThreadInfo*)(p))->persist*INTE_PER_SEC);
Sleep(m_delay);                             //延遲等待

printf("Reader thread %d sents the  reading require.\n",m_serial);

wait_for_mutex1 = WaitForSingleObject(h_Mutex1,-1);

//進入讀者臨界區
EnterCriticalSection(&cs_Read);
//
wait_for_mutex2 = WaitForSingleObject(h_Mutex2,-1);
//修改讀者數目
readcount++;
if(readcount == 1)
{
  //如果是第一個讀者,等待寫者寫完
  EnterCriticalSection(&cs_Write);
}
ReleaseMutex(h_Mutex2);      //釋放互斥信號mutex2

//讓其他讀者進入臨界區
LeaveCriticalSection(&cs_Read);
ReleaseMutex(h_Mutex1);

//讀文件
printf("Reader thread %d begins to  read file.\n",m_serial);
Sleep(m_persist);

//退出線程
printf("Reader thread %d finished  reading file.\n",m_serial);
// 
wait_for_mutex2 = WaitForSingleObject(h_Mutex2,-1);
readcount--;
if(readcount == 0)
{
    //最后一個讀者喚醒寫者
    LeaveCriticalSection(&cs_Write);
}
ReleaseMutex(h_Mutex2);
}

////////////////////////////////////////////////////////////////////////
//寫者優先—寫者線程
//P:寫者線程信息

void WP_WriterThread(void* p)
{
DWORD m_delay;
DWORD m_persist;
int m_serial;
DWORD wait_for_mutex3;

//互斥對象
HANDLE h_Mutex3;
h_Mutex3 = OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex3");

// 從參數獲得信息
m_serial = ((ThreadInfo*)(p))->serial;
m_delay = (DWORD)(((ThreadInfo*)(p))->delay*INTE_PER_SEC);
m_persist = (DWORD)(((ThreadInfo*)(p))->persist*INTE_PER_SEC);
Sleep(m_delay);                             //延遲等待

printf("Writer thread %d sents the writing require.\n",m_serial);
//
wait_for_mutex3 = WaitForSingleObject(h_Mutex3,-1);
writecount++;
if(writecount == 1)
{
    //第一個寫者,等待讀者讀完
    EnterCriticalSection(&cs_Read);
}
ReleaseMutex(h_Mutex3);

//寫者進入臨界區
EnterCriticalSection(&cs_Write);
//寫文件 
printf("Writer thread %d begins the write to the file.\n",m_serial);
Sleep(m_persist);
//退出線程
printf("Writer thread %d finishing writing to the file.\n",m_serial);
//離開臨界區
LeaveCriticalSection(&cs_Write);

//
wait_for_mutex3 = WaitForSingleObject(h_Mutex3,-1);
writecount--;
if(writecount == 0)
{
    //寫者寫完,讀者可讀
    LeaveCriticalSection(&cs_Read);
}
ReleaseMutex(h_Mutex3);
}

///////////////////////////////////////////////////////
//寫者優先處理函數
//file:文件名

void WriterPriority(char* file)
{
DWORD n_thread = -1;
DWORD thread_ID;
DWORD wait_for_all;

//互斥對象
HANDLE h_Mutex1;
h_Mutex1 = CreateMutex(NULL,FALSE,"mutex1");
HANDLE h_Mutex2;
h_Mutex2 = CreateMutex(NULL,FALSE,"mutex2");
HANDLE h_Mutex3;
h_Mutex3 = CreateMutex(NULL,FALSE,"mutex3");

//線程對象
HANDLE h_Thread[MAX_THREAD_NUM];
ThreadInfo thread_info[MAX_THREAD_NUM];

readcount = 0;
writecount = 0;

InitializeCriticalSection(&cs_Write);       //初始化臨界區
InitializeCriticalSection(&cs_Read);
ifstream inFile;
inFile.open(file);
printf("Writer Priority:\n\n");

while(inFile)
{
    //讀入每一個讀者,寫者的信息
    inFile>>thread_info[++n_thread].serial;
    inFile>>thread_info[n_thread].entity;
    inFile>>thread_info[n_thread].delay;
    inFile>>thread_info[n_thread].persist;
    inFile.get();
}

for(int i = 0; i < (int) (n_thread); i++)
{
    if (thread_info[i].entity == READER || thread_info[i].entity =='r')
    {       
	 //創建讀者線程
	 h_Thread[i] = CreateThread(NULL,0,
	                           (LPTHREAD_START_ROUTINE)(WP_ReaderThread),
		   			            &thread_info[i],0,&thread_ID);
	}
    else{
     //創建寫者線程
	 h_Thread[i] = CreateThread(NULL,0,
	                            (LPTHREAD_START_ROUTINE)(WP_WriterThread),
										    &thread_info[i],
											0,&thread_ID);
	}	
}

//等待所有線程結束
wait_for_all = WaitForMultipleObjects(n_thread,h_Thread,TRUE,-1);
printf("ALL reader and writer have finished operating.\n");
}

/////////////////////////////////////////////////////////////////////////////////////
//主函數
int main(int argc, char* argv[])
{
char ch;

while (true)
{
              //打印提示信息
printf("********************************************************\n");
printf("        1: Reader Priority\n");
printf("        2: Writer Priority\n");
printf("        3: Exit to Windows\n");
printf("********************************************************\n");
printf(" Enter  your choice (1,2 or 3):");
//如果輸入信息不正確,繼續輸入
do{
     ch = (char)_getch(); 
}while(ch != '1'&& ch != '2' && ch != '3');

system("cls");
//選者3返回
if (ch == '3') 
    return 0;
	//選擇1,讀者優先
else if(ch == '1')
     ReaderPriority("PC.TXT");
	//選擇2,寫者優先
else if(ch == '2')
     WriterPriority("PC.TXT");
//結束
printf("\npress Any Key To Continue:");
_getch();
system("cls");
}
return 0;
}	  
			
					
																	        

























?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本高清成人免费播放| 日韩不卡手机在线v区| 2020国产精品自拍| 在线观看一区不卡| 色呦呦国产精品| 色狠狠桃花综合| 成人午夜在线播放| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲精品国产无天堂网2021| 国产麻豆视频一区二区| 日本视频免费一区| 亚洲成人你懂的| 一区二区久久久久| 中文乱码免费一区二区| 久久久久久久久久久99999| 2023国产精华国产精品| 日韩视频永久免费| 欧美一卡2卡3卡4卡| 91精品在线观看入口| 91精选在线观看| 日韩一本二本av| 久久人人超碰精品| 精品国产免费一区二区三区四区 | 欧美探花视频资源| 欧美精品丝袜久久久中文字幕| 欧美日韩aaaaaa| 欧美一区二区日韩一区二区| 日韩视频免费直播| 国产精品久久久久久久久动漫| 一区二区三区四区亚洲| 日韩和的一区二区| 国产精品一级在线| 日本久久一区二区三区| 欧美久久久久久蜜桃| 精品日韩欧美一区二区| 久久精品男人的天堂| 亚洲免费在线视频一区 二区| 亚洲电影一区二区三区| 久久精品免费观看| 黑人巨大精品欧美黑白配亚洲| 99国产一区二区三精品乱码| 91精品国产一区二区三区蜜臀| 欧美一级生活片| 国产亚洲精品aa| 视频一区二区欧美| 日韩高清在线一区| 久久久国产精华| 亚洲欧美日韩中文播放| 视频在线在亚洲| 99精品一区二区| 久久综合色婷婷| 亚洲第一狼人社区| 成人午夜在线视频| 精品欧美久久久| 午夜日韩在线观看| 91麻豆福利精品推荐| 久久蜜桃一区二区| 欧美a级一区二区| 在线精品国精品国产尤物884a| 欧美国产乱子伦 | 欧美日韩一本到| 国产精品色婷婷| 韩国成人在线视频| 日韩一区二区高清| 亚洲18影院在线观看| 91久久精品国产91性色tv| 国产亚洲成年网址在线观看| 美女视频免费一区| 欧美高清激情brazzers| 性久久久久久久| 91精品国产91久久久久久最新毛片| **性色生活片久久毛片| 粉嫩欧美一区二区三区高清影视 | 黄一区二区三区| 日韩午夜精品视频| 欧美aⅴ一区二区三区视频| 欧美午夜一区二区| 一区2区3区在线看| 欧美美女一区二区在线观看| 亚洲成人tv网| 7777精品久久久大香线蕉| 水野朝阳av一区二区三区| 欧美色图免费看| 日韩和欧美的一区| 精品国产乱码久久久久久牛牛| 午夜精品久久久久久久久| 日本精品一级二级| 亚洲一区二区三区爽爽爽爽爽| 91美女片黄在线| 亚洲18女电影在线观看| 欧美日韩的一区二区| 蜜臀久久久99精品久久久久久| 欧美伦理视频网站| 国产在线播放一区| 国产精品久久久久影院| 94-欧美-setu| 亚洲午夜在线视频| 日韩色视频在线观看| 亚洲精品成人在线| 亚洲成人免费电影| 911国产精品| 国产一区在线看| 国产精品国产三级国产普通话蜜臀| 99视频一区二区| 久久99国产精品免费网站| 日韩欧美在线影院| 丁香婷婷综合激情五月色| 一区二区三区影院| 欧美猛男超大videosgay| 国产真实乱对白精彩久久| 亚洲视频在线一区观看| 欧美日韩视频第一区| 国产成人在线视频网站| 亚洲午夜在线电影| 国产亚洲人成网站| 欧美高清激情brazzers| 9i在线看片成人免费| 青青草原综合久久大伊人精品优势 | 中文字幕一区视频| 制服丝袜中文字幕一区| 高清beeg欧美| 日本成人在线看| 亚洲美女淫视频| 久久久精品日韩欧美| 欧美系列亚洲系列| 成人av在线看| 国产一区二区三区黄视频 | 91精品在线一区二区| proumb性欧美在线观看| 天堂影院一区二区| 亚洲色图在线视频| 久久综合狠狠综合久久综合88| 在线观看一区二区视频| 国产一区二区三区四区在线观看| 自拍偷拍亚洲综合| 国产日韩欧美精品在线| 欧美一级久久久久久久大片| 91免费看`日韩一区二区| 国产精品 日产精品 欧美精品| 午夜精品福利一区二区蜜股av| 亚洲免费av高清| 亚洲欧洲美洲综合色网| 欧美国产日韩在线观看| 国产欧美一区二区精品仙草咪 | 国产成人av影院| 精品一区二区在线观看| 久久精品免费看| 久久99九九99精品| 久久99日本精品| 精品在线一区二区| 久久成人综合网| 国产一区久久久| 国产精品一区免费视频| 国产成人自拍网| 成人18精品视频| 成人动漫一区二区三区| 91在线云播放| 色久优优欧美色久优优| 欧美视频三区在线播放| 欧美日韩一区二区在线观看| 欧美日韩三级视频| 欧美一区二区三区四区视频| 日韩一区二区三免费高清| 日韩色视频在线观看| 精品国产乱码久久久久久久久 | 久久福利视频一区二区| 国产中文字幕精品| 粉嫩aⅴ一区二区三区四区| 精品一区二区三区在线观看| 国产一区二区精品久久99| 国产99精品在线观看| 91尤物视频在线观看| 欧美午夜精品久久久久久超碰| 3d动漫精品啪啪1区2区免费| 欧美成人女星排名| 中文字幕在线免费不卡| 亚洲国产三级在线| 国产在线精品免费| 97国产一区二区| 欧美精品第1页| 国产三级精品三级在线专区| 日韩一区中文字幕| 亚洲电影第三页| 国产91清纯白嫩初高中在线观看 | 97se狠狠狠综合亚洲狠狠| 欧美日韩一区国产| 日韩精品一区二区三区四区视频| 国产午夜三级一区二区三| 综合自拍亚洲综合图不卡区| 日韩影视精彩在线| 国产成a人亚洲精| 欧美精品18+| 国产精品久久福利| 看片的网站亚洲| 色偷偷成人一区二区三区91| 日韩精品一区二区三区中文精品| 国产精品久99| 国产在线播放一区三区四| 欧美亚洲国产怡红院影院| 国产亚洲欧洲997久久综合|