Linux高級(jí)環(huán)境編程實(shí)驗(yàn)報(bào)告4

Linux高級(jí)環(huán)境編程實(shí)驗(yàn)報(bào)告4

ID:37711912

大?。?51.00 KB

頁數(shù):8頁

時(shí)間:2019-05-29

Linux高級(jí)環(huán)境編程實(shí)驗(yàn)報(bào)告4_第1頁
Linux高級(jí)環(huán)境編程實(shí)驗(yàn)報(bào)告4_第2頁
Linux高級(jí)環(huán)境編程實(shí)驗(yàn)報(bào)告4_第3頁
Linux高級(jí)環(huán)境編程實(shí)驗(yàn)報(bào)告4_第4頁
Linux高級(jí)環(huán)境編程實(shí)驗(yàn)報(bào)告4_第5頁
資源描述:

《Linux高級(jí)環(huán)境編程實(shí)驗(yàn)報(bào)告4》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、作業(yè)報(bào)告學(xué)生姓名:學(xué)號(hào):指導(dǎo)教師:學(xué)生E-mail:一、作業(yè)名稱:多隊(duì)列線程池的應(yīng)用二、作業(yè)要求設(shè)計(jì)并實(shí)現(xiàn)一個(gè)整數(shù)加法運(yùn)算的線程池,其中能夠接收三種線程:1、用戶線程,向線程池(主控線程)提交加法運(yùn)算請(qǐng)求;2、主控線程,接收用戶線程提出的加法運(yùn)算請(qǐng)求,并負(fù)載均衡地將請(qǐng)求下發(fā)到若干計(jì)算線程;3、若干計(jì)算進(jìn)程,接收來自于主控線程轉(zhuǎn)發(fā)的加法計(jì)算請(qǐng)求,完成加法計(jì)算,并將計(jì)算結(jié)果直接返回給用戶線程。另外,這三種線程都應(yīng)具有各自的消息隊(duì)列,來完成加法計(jì)算請(qǐng)求的發(fā)送與轉(zhuǎn)發(fā),并返回計(jì)算結(jié)果。具體業(yè)務(wù)要求:1)、用戶線程需同時(shí)向主控線程提出>=

2、1000個(gè)加法計(jì)算請(qǐng)求2)、用戶線程需要驗(yàn)證是否收到了這些加法計(jì)算的結(jié)果三、設(shè)計(jì)與實(shí)現(xiàn)根據(jù)作業(yè)要求分析,需要設(shè)個(gè)三中線程,而且三種線程之間還要相互通信和協(xié)作,圖3-1顯示了它們之間的通信關(guān)系。用戶線程向線程池中的主控線程發(fā)送消息,主控線程將消息負(fù)載均衡的分發(fā)給線程池中的若干計(jì)算線程。為了實(shí)現(xiàn)負(fù)載均衡分發(fā),將所有的線程形成一個(gè)循環(huán)鏈表,設(shè)置一個(gè)指針,該指針總是指向剛被分發(fā)消息的下一個(gè)計(jì)算線程,則所有的線程獲取消息的機(jī)會(huì)均等。計(jì)算線程計(jì)算完成后直接將消息計(jì)算結(jié)果返回給用戶線程。設(shè)計(jì)實(shí)現(xiàn)的關(guān)鍵操作是線程池中主控線程分發(fā)線程,計(jì)算線程

3、組成循環(huán)鏈表,完成消息計(jì)算,將消息結(jié)果返回給用戶線程。圖3-1三種線程間通信下面給出線程池,計(jì)算線程和主控線程的具體實(shí)現(xiàn)。代碼清單3.1-a線程池的實(shí)現(xiàn)classCLMyCalculateThreadPro;CLThreadPool::CLThreadPool()//未指定線程數(shù)時(shí)默認(rèn)構(gòu)造的線程數(shù)為6{ThreadNumber=6;MainThread="mainThread";ThreadCount=NULL;//計(jì)算線程隊(duì)列,初始為空}CLThreadPool::CLThreadPool(intthreadNumber){

4、if(threadNumber<=0){threadNumber=6;}ThreadNumber=threadNumber;MainThread="mainThread";//主控線程的名字ThreadCount=NULL;}CLThreadPool::~CLThreadPool(){}voidCLThreadPool::InitThreadPool()//初始化線程池{//創(chuàng)建主控線程CLThreadProxyproxyMain(newCLThreadMainProcessor(this),MainThread.c_str(

5、),false);proxyMain.Run(0);for(inti=1;i<=ThreadNumber;i++)//創(chuàng)建若干計(jì)算線程{CLThreadQueue*thread=newCLThreadQueue;chart[30];std::strings;sprintf(t,"%d",i);s=t;thread->ThreadName="thread_"+s;thread->Next=ThreadCount;ThreadCount=thread;CLThreadProxyproxy(newCLMyMsgProcessor,(

6、thread->ThreadName).c_str(),false);proxy.Run(0);}CurrentThread=ThreadCount;}voidCLThreadPool::UninitThreadPool(){}//用戶向主控線程發(fā)送消息的實(shí)體voidCLThreadPool::PostMessageToMainThread(CLMessage*Msg){CLExecutiveNameServer::PostExecutiveMessage(MainThread.c_str(),Msg);}代碼清單3.1-a是

7、線程池的具體實(shí)現(xiàn),在構(gòu)造函數(shù)中,設(shè)置線程池中計(jì)算線程的數(shù)目,默認(rèn)情況下為6;設(shè)置線程循環(huán)隊(duì)列指針初始為空等。在線程池的初始化函數(shù)CLThreadPool::InitThreadPool中創(chuàng)建主控線程和若干計(jì)算線程。用戶調(diào)用PostMessageToMainThread函數(shù)向主控線程發(fā)送消息實(shí)體,參數(shù)是指向CLMessge類的對(duì)象。代碼清單3.1-b計(jì)算線程的實(shí)現(xiàn)CLMyCalculateThreadPro::CLMyCalculateThreadPro(){}CLMyCalculateThreadPro::~CLMyCalcu

8、lateThreadPro(){}//將加法消息和退出消息的執(zhí)行注冊(cè)到消息的回調(diào)函數(shù)中CLStatusCLMyCalculateThreadPro::Initialize(CLMessageLoopManager*pMessageLoop,void*pContext){pMe

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。