91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡(jiǎn)介

以生產(chǎn)者消費(fèi)者模型為基礎(chǔ),在Windows環(huán)境下創(chuàng)建一個(gè)控制臺(tái)進(jìn)程,在該進(jìn)程中創(chuàng)建讀者寫(xiě)者線(xiàn)程模擬生產(chǎn)者和消費(fèi)者。寫(xiě)者線(xiàn)程寫(xiě)入數(shù)據(jù),然后將數(shù)據(jù)放置在一個(gè)空緩沖區(qū)中供讀者線(xiàn)程讀取。讀者線(xiàn)程從緩沖區(qū)中獲得數(shù)據(jù),然后釋放緩沖區(qū)。當(dāng)寫(xiě)者線(xiàn)程寫(xiě)入數(shù)據(jù)時(shí),如果沒(méi)有空緩沖區(qū)可用,那么寫(xiě)者線(xiàn)程必須等待讀者線(xiàn)程釋放出一個(gè)空緩沖區(qū)。當(dāng)讀者線(xiàn)程讀取數(shù)據(jù)時(shí),如果沒(méi)有滿(mǎn)的緩沖區(qū),那么讀入線(xiàn)程將被阻塞,直到新的數(shù)據(jù)被寫(xiě)進(jìn)去。

資源截圖

代碼片段和文件信息

#include?“windows.h“
#include?
#include?
#include?

const?unsigned?short????size_of_buffer?=?1;?//緩沖區(qū)長(zhǎng)度不能是10,為了滿(mǎn)足讀者全讀完了寫(xiě)者才能寫(xiě)的要求
?short?WriteID?=?1;
?short?ReadID?=?1;
?short?in?=?0; //產(chǎn)品進(jìn)緩沖區(qū)時(shí)的緩沖區(qū)下標(biāo)
?short?out?=?0; //產(chǎn)品出緩沖區(qū)時(shí)的緩沖區(qū)下標(biāo)

int?gData[??size_of_buffer];//緩沖區(qū)是個(gè)循環(huán)隊(duì)列
bool?continu?=?true;??//控制程序結(jié)束
HANDLE?g_hMutex; //用于線(xiàn)程間的互斥
HANDLE?g_hFullSemaphore;//當(dāng)緩沖區(qū)滿(mǎn)時(shí)使寫(xiě)者等待
HANDLE?g_hEmptySemaphore;//當(dāng)緩沖區(qū)空時(shí)使讀者等待

double?eRandom(int?upLimit);
typedef?struct
{ int?data;
}INTEGER;

//寫(xiě)者
DWORD?WINAPI?Writer(LPVOID?lppara)
{
????while(continu){
????????WaitForSingleobject(g_hFullSemaphoreINFINITE);//可在指定時(shí)間內(nèi)等待指定對(duì)象為可用
????????WaitForSingleobject(g_hMutexINFINITE);
int?tNo=((INTEGER*)lppara)->data;
????????if(WriteID?<=?10){
//cout?< printf(“?寫(xiě)者?%d?寫(xiě)入?%d??\n“tNo+1WriteID);
gData[in]?=?WriteID;
in?=?(in+1)%??size_of_buffer;
WriteID++;
}else?return?-1;
???????int?sleepTime=20*(int)eRandom(50+tNo);
???Sleep(sleepTime);
????????ReleaseMutex(g_hMutex);
????????ReleaseSemaphore(g_hEmptySemaphore1NULL);
????}
????return?0;
}

//讀者
DWORD?WINAPI?Reader(LPVOID?lppara)
{
????while(continu){
????????WaitForSingleobject(g_hEmptySemaphoreINFINITE);
????????WaitForSingleobject(g_hMutexINFINITE);
int?tNo=((INTEGER*)lppara)->data;
????????ReadID?=?gData[out];
out?=?(out+1)%??size_of_buffer;
//cout?< printf(“?讀者?%d?讀取?%d??\n“tNo+1ReadID);
???????int?sleepTime=10*(int)eRandom(50+tNo);
Sleep(sleepTime);
????????ReleaseMutex(g_hMutex);
????????ReleaseSemaphore(g_hFullSemaphore1NULL);
????}
????return?0;
}

int?main(){
//創(chuàng)建各個(gè)互斥信號(hào)
????g_hMutex?=?CreateMutex(NULLFALSENULL);
????g_hFullSemaphore?=?CreateSemaphore(NULL??size_of_buffer??size_of_bufferNULL);
????g_hEmptySemaphore?=?CreateSemaphore(NULL0??size_of_bufferNULL);

const?unsigned?short?WRITER_COUNT?=?5; //寫(xiě)者的個(gè)數(shù)
????const?unsigned?short?READER_COUNT?=?3; //讀者的個(gè)數(shù)

const?unsigned?short?THREADS_COUNT?=?WRITER_COUNT?+?READER_COUNT; //線(xiàn)程總數(shù)

HANDLE?hThreads[THREADS_COUNT]; //各線(xiàn)程的handle
????DWORD?writerID[WRITER_COUNT]; //寫(xiě)者線(xiàn)程的標(biāo)識(shí)符
????DWORD?readerID[READER_COUNT]; //讀者線(xiàn)程的標(biāo)識(shí)符

//創(chuàng)建寫(xiě)者線(xiàn)程
INTEGER*?tmpInt;
????for?(int?i=1;i? tmpInt=(INTEGER*)malloc(sizeof(INTEGER));
tmpInt->data=i;
????????hThreads[i]=CreateThread(NULL0WritertmpInt0&writerID[i]);
//CreateThread():在調(diào)用進(jìn)程的地址空間上創(chuàng)建一個(gè)線(xiàn)程
????????if?(hThreads[i]==NULL)
return?-1;
????}

//創(chuàng)建消費(fèi)者線(xiàn)程
????for?(int?i=1;i? tmpInt=(INTEGER*)malloc(sizeof(INTEGER));
tmpInt->data=i;
????????hThreads[WRITER_COUNT+i]=CreateThread(NULL0ReadertmpInt0&readerID[i]);
????????if?(hThreads[i]==NULL)
return?-1;
????}

while(continu){
????????if(getchar()){?
//按回車(chē)后終止程序運(yùn)行
????????????continu?=?false;
????????}
????}

????re

?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----

?????文件???????3413??2010-10-09?22:03??操作系統(tǒng)實(shí)驗(yàn)一實(shí)驗(yàn)報(bào)告-李旦蘭\w_and_r.cpp

?????文件?????261632??2010-10-10?13:57??操作系統(tǒng)實(shí)驗(yàn)一實(shí)驗(yàn)報(bào)告-李旦蘭\操作系統(tǒng)實(shí)驗(yàn)一實(shí)驗(yàn)報(bào)告.doc

?????目錄??????????0??2010-10-10?13:59??操作系統(tǒng)實(shí)驗(yàn)一實(shí)驗(yàn)報(bào)告-李旦蘭

-----------?---------??----------?-----??----

???????????????265045????????????????????3


評(píng)論

共有 條評(píng)論

相關(guān)資源