網易公開課,多執行緒,冰淇淋問題,vc2010控制台程式編譯通過:
/* testvc.cpp : 冰激凌店問題。
**問題描述:有n個客戶到冰淇淋店中買[1-n]個甜筒,店員接到訂單後開始做甜筒,
**每乙個甜筒都需經理檢驗,合格後才能交付顧客。顧客得到所需數量甜筒後到收銀員處結賬。 */
#include "stdafx.h"
#include
//客戶數量
#define numcustums 5
//甜筒最大購買數
#define numcones 10
typedef struct customers customer; //客戶資訊
struct inspection inspection; //檢驗訊號量組
struct line line; //結賬訊號量組
handle halldone; //完成客戶服務訊號量
void initsemaphore(); //初始化訊號量
dword _stdcall manager(lpvoid lpparameter);
dword _stdcall clerk(lpvoid lpparameter);
dword _stdcall customer(lpvoid lpparameter);
dword _stdcall cashier(lpvoid lpparameter);
int main(int argc, char* argv)
releasesemaphore(inspection.hfinished,1,null); //完成乙個檢驗 }
printf("經理檢驗了 %d 個甜筒, %d 個合格\n",numinspected,numaccepted);
return 0; }
/*clerk,生產乙個合格甜筒,每生產乙個就送manager檢驗
**引數:交付甜筒訊號量,完成則訊號量++ */
dword _stdcall clerk(lpvoid lpparameter)
releasesemaphore(hclerkdone,1,null); //當前甜筒交付給客戶
return 0; }
/*customer,購買甜筒,並去結賬
**引數為該客戶資訊 */
dword _stdcall customer(lpvoid lpparameter)
for(int i=0;inumcones;i++)
printf("客戶%d ,已拿到 %d 個甜筒,開始排隊結賬\n",pcustomer->id,pcustomer->numcones);
//開始排隊結賬
waitforsingleobject(line.hnumblock, infinite); //取排隊號碼
int place = line.number++;
releasesemaphore(line.hnumblock,1,null);
line.customers[place].id = pcustomer->id; //儲存客戶資訊
line.customers[place].numcones = pcustomer->numcones;
releasesemaphore(line.hrequested,1,null); //申請結賬
waitforsingleobject(line.hcustomers[place], infinite); //等待收銀員結賬
printf("客戶%d ,結賬編號 %d,服務完畢\n",pcustomer->id,place);
releasesemaphore(halldone,1,null); //乙個客戶服務完畢,完成量halldone++
return 0; }
//cashier,結賬
dword _stdcall cashier(lpvoid lpparameter) {
for(int i=0;iline.number = 0; //結賬排隊號
line.hnumblock = createsemaphore(null, 1, 1, null); //排隊取號鎖,初始為1
line.hrequested = createsemaphore(null, 0, 1, null); //排隊等待結賬訊號,初始為0
for(int i=0;i
C 多執行緒問題
多執行緒問題,一直是我的乙個噩夢,老是搞不清楚怎麼回事,真是很慚愧呀,所以今天特地向各位的大大求教。如下 c include www.h include include include include include include pthread cond t cond pthread mutex...
多執行緒問題C
1.過去寫的微控制器裸跑的程式,其實也屬於多執行緒的,用智慧型電表中的韌體做個比方。void main void 迴圈中,所列包括3個 執行緒 處理,執行緒1在執行完之後執行執行緒2,執行緒2執行完進入執行緒3.後面依次,此類我覺得也可稱之 執行緒 由於不必存在同時處理的問題,因此不存在爭搶同一共享...
C 多執行緒問題
多執行緒問題,用法其實並不難,難的是在複雜的場景用不好,多執行緒的用法大家能知道幾個?thread?threadtool?下面我們詳細講一下多執行緒的歷程 net framework 1.0 thread 最初版本多執行緒thread,功能非常豐富也很強大,但是呢也很容易出錯,主要是多執行緒是從作業...