C 多執行緒,冰淇淋問題

2021-08-08 13:10:34 字數 2155 閱讀 5054

網易公開課,多執行緒,冰淇淋問題,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,功能非常豐富也很強大,但是呢也很容易出錯,主要是多執行緒是從作業...