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

  • 大小: 85KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-05-22
  • 語言: C/C++
  • 標簽:

資源簡介

操作系統的理發師問題解決文件打包下載(可執行文件,文檔,代碼齊全),C++實現,簡單易學易用。

資源截圖

代碼片段和文件信息

//?babe.cpp?:?Defines?the?entry?point?for?the?console?application.
//

#include?“stdafx.h“
#include?“windows.h“
#include?“iostream.h“
#include?“math.h“

int?long?waiting(0);??????????//等待理發的顧客人數
int??????chairs;??????????????//店中椅子的總數目
char?????open_door;???????????//開門
char?????close_door;??????????//關門
int??????count(0);????????????//顧客的序號
int??????finish(0);???????????//已經理完發的顧客人數
DWORD?a;
HANDLE?Mutex????=::CreateMutex(NULL?FALSE?“Mutex“);??//用來實現進程的互斥??
HANDLE?barbers???=::CreateSemaphore(NULL?11?“barbers“);?//定義信號量來進行線程間的同步
HANDLE?customers?=::CreateSemaphore(NULL03“customers“);?//定義信號量來進行線程間的同步

int?random()
//定義隨機函數來產生顧客,并使兩個顧客間的時間少于15秒
{
????return?(rand()*15000)/RAND_MAX;
}
void?cuthair()
//理發師的理發函數,用時15秒
{?
::Sleep?(15000);
cout<<“理發結束?!“<}

void?gethaircut()
//?顧客被理發的函數
{
::Sleep?(15001);??????????//顧客被理發的函數,為了和理發師之間有所區別,比理發師理發時間長1毫秒
cout<<“第“<}
DWORD?WINAPI?customer(LPVOID?pParm2)
//?顧客線程
{
::WaitForSingleobject(Mutex?INFINITE);??????//P(mutex)來進行互斥操作
count++;?????????????????????????????????????//來的是第幾個顧客
cout<<“顧客敲門!第?“< if?(waiting {
if?(waiting!=0)
{
cout<<“現在有“< }
else
cout<<“無人在等待理發“< waiting++;
cout<<“剩余“< cout<<“有空位,顧客已坐下“< ::ReleaseSemaphore(customers1NULL); //V(customer)
::ResumeThread(customers); //喚醒理發師進程
::ReleaseMutex(Mutex); //釋放互斥量,以便其他線程使用
::WaitForSingleobject(barbersINFINITE);//等待理發
gethaircut(); //理發并離開
}
else
{
cout<<“沒有空椅子,第“< ::ReleaseMutex(Mutex);
}
return?0;
}
DWORD?WINAPI?barber(LPVOID?pParm1)
//理發師線程
{
???while(true)?????????????????????????
???//外循環
???{
::WaitForSingleobject(customersINFINITE);//p(customers),等待顧客
::WaitForSingleobject(MutexINFINITE);???//等待互斥量
????????waiting--;???????????????????????????????//等待的人數減1
::ReleaseSemaphore(barbers1NULL);??????//釋放信號量
::ResumeThread(barbers);?????????????????//喚醒顧客進程
::ReleaseMutex(Mutex);???????????????????//v(mutex);???
cuthair();???????????????????????????????//理發
finish++;????????????????????????????????//理發完畢的顧客數目加1
???}
???return?0;
}

int?main(int?argc?char*?argv[])
//實現線程的操作
{
????cout<<“輸入理發店中的椅子個數:“;
cin>>chairs;
cout<<“店中有“< cout<<“是否開始接待顧客?Y/N“< cin>>open_door;
while?(open_door!=‘y‘)
{
cout< cout<<“是否開始接待顧客?Y/N“< cin>>open_door;
}
HANDLE?hThread1;
HANDLE?hThread2;
hThread2=::CreateThread?(NULL0barberNULL0NULL);?//產生一個理發師進程
while(close_door!=‘y‘)
{?
::Sleep(random());//函數實現顧客隨機到來
hThread1=::CreateThread(NULL0customerNULLaNULL);
cout< if?(finish>=8?&&?waiting==0)
//如果完成數超過8并且沒有人等待

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件?????192603??2009-12-18?19:19??理發師\babe.exe

?????文件???????3708??2009-12-18?12:57??理發師\babe.cpp

?????文件????????667??2009-12-17?21:54??理發師\StdAfx.h

?????文件????????291??2009-12-17?21:54??理發師\StdAfx.cpp

?????文件?????112128??2010-04-17?09:01??理發師\操作系統文檔.doc

?????目錄??????????0??2009-12-18?19:20??理發師

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

???????????????309397????????????????????6


評論

共有 條評論

相關資源