freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

生產(chǎn)者與消費(fèi)者問(wèn)題0-wenkub

2023-04-09 06:03:22 本頁(yè)面
 

【正文】 被生產(chǎn)出來(lái)。設(shè)計(jì)結(jié)論和心得(1)結(jié)論:在同一個(gè)進(jìn)程地址空間內(nèi)執(zhí)行的兩個(gè)線程。l 參數(shù)說(shuō)明lpCriticalSection——指向臨界區(qū)對(duì)象的指針。l 參數(shù)說(shuō)明lpCriticalSection——指向臨界區(qū)對(duì)象的指針。(6) ReleaseMutexl 功能——打開(kāi)互斥鎖,即把互斥量加1。成功執(zhí)行則返回非0值l 格式BOOL ReleaseSemaphore(HANDLE hSemaphore,LONG lReleaseCount,LPLONG lppreviousCount )。(4) WaitForSingleObjectl 功能——使程序處于等待狀態(tài),直到信號(hào)量hHandle出現(xiàn)(即其值大于等于1)或超過(guò)規(guī)定的等待時(shí)間l 格式DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds)。lInitialCount——信號(hào)量的初始值。bInitialOwner——指示當(dāng)前線程是否馬上擁有該互斥量(即馬上加鎖)。lpParamiter——定義一個(gè)給進(jìn)程傳遞參數(shù)的指針。(1) CreateThreadl 功能——?jiǎng)?chuàng)建一個(gè)在調(diào)用進(jìn)程的地址空間中執(zhí)行的線程l 格式HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,DWORD dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParamiter,DWORD dwCreationFlags,Lpdword lpThread )。當(dāng)消費(fèi)者進(jìn)程消費(fèi)物品時(shí),如果沒(méi)有滿的緩沖區(qū),那么消費(fèi)者進(jìn)程將被阻塞,直到新的物品被生產(chǎn)出來(lái)。要求設(shè)計(jì)在同一個(gè)進(jìn)程地址空間內(nèi)執(zhí)行的兩個(gè)進(jìn)程。生產(chǎn)者進(jìn)程生產(chǎn)物品,然后將物品放置在一個(gè)空緩沖區(qū)中供消費(fèi)者進(jìn)程消費(fèi)。功能要求:根據(jù)進(jìn)程同步機(jī)制,編寫(xiě)一個(gè)解決上述問(wèn)題的程序,可顯示緩沖池狀態(tài)、放數(shù)據(jù)、取數(shù)據(jù)等過(guò)程。l 參數(shù)說(shuō)明lpThreadAttributes——指向一個(gè)LPSECURITY_ATTRIBUTES(新線程的安全性描述符)。dwCreationFlags——定義控制線程創(chuàng)建的附加標(biāo)志。lpName——互斥量名稱。該值大于0,但小于lMaximumCount指定的最大值。l 參數(shù)說(shuō)明hHandle——信號(hào)量指針。l 參數(shù)說(shuō)明hSemaphore——信號(hào)量指針。成功調(diào)用則返回0l 格式BOOL ReleaseMutex(HANDLE hMutex)。(8) EnterCriticalSectionl 功能——等待指定臨界區(qū)對(duì)象的所有權(quán)l(xiāng) 格式VOID enterCriticalSection(LPCRITICAL_SECTION lpCriticalSection)。ProduceWait BufferWait ProductsConsume結(jié)束While produceWhile consumeBegin(1)所用技術(shù):應(yīng)用進(jìn)程同步技術(shù)—信號(hào)量,以生產(chǎn)者/消費(fèi)者模型為依據(jù),在Windows 環(huán)境下創(chuàng)建一個(gè)控制臺(tái)進(jìn)程,在該進(jìn)程中創(chuàng)建n個(gè)線程模擬生產(chǎn)者和消費(fèi)者,實(shí)現(xiàn)進(jìn)程(線程)的同步與互斥。生產(chǎn)者線程生產(chǎn)物品,然后將物品放置在一個(gè)空緩沖區(qū)中供消費(fèi)者線程消費(fèi)。(2)心得:通過(guò)課程設(shè)計(jì),進(jìn)一步學(xué)習(xí)并理解生產(chǎn)者/消費(fèi)者模型及其同步互斥規(guī)則,學(xué)習(xí)了解了windows同步對(duì)象及其特性,熟悉實(shí)驗(yàn)環(huán)境,掌握有關(guān)API的使用方法,同時(shí)熟悉對(duì)vc的使用,提高了分析問(wèn)題以及解決問(wèn)題的能力,通過(guò)學(xué)習(xí)相關(guān)知識(shí),擴(kuò)展了知識(shí)面。 //是P還是C double delay。//全局變量的定義//臨界區(qū)對(duì)象的聲明,用于管理緩沖區(qū)的互斥訪問(wèn);CRITICAL_SECTION PC_Critical[MAX_BUFFER_NUM]。 //線程信息數(shù)組;HANDLE empty_semaphore。 //實(shí)際的緩沖區(qū)或者臨界區(qū)的數(shù)目;HANDLE h_Semaphore[MAX_THREAD_NUM]。int FindProducePositon()。 //初始化緩沖區(qū); for(int i=0。jMAX_THREAD_NUM。 Thread_Info[j].n_request = 0。PC_Critical[i])。 printf(輸入文件是:\n)。 inFile Thread_Info[n_Thread].delay。\n39。 (c)。j++){ int Temp_serial = Thread_Info[j].serial。 int Temp_request = Thread_Info[j].n_request。 coutendl。 //下面這個(gè)循環(huán)用線程的ID號(hào)來(lái)為相應(yīng)生產(chǎn)線程的產(chǎn)品讀寫(xiě)時(shí)所 //使用的同步信號(hào)量命名; for(j=0。 while(temp){ char c = (char)(temp%10)。 } //創(chuàng)建生產(chǎn)者和消費(fèi)者線程; for(i =0。) h_Thread[i]= CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Produce), amp。 } //主程序等待各個(gè)線程的動(dòng)作結(jié)束; wait_for_all = WaitForMultipleObjects(n_Thread,h_Thread,TRUE,1)。}//確認(rèn)是否還有對(duì)同一產(chǎn)品的消費(fèi)請(qǐng)求未執(zhí)行;bool IfInOtherRequest(int req){ for(int i=0。j++) if(Thread_Info[i].thread_request[j] == req) return TRUE。in_Buffer_or_Critical。 } return EmptyPosition。i++) if(Buffer_Critical[i]==ProPos){ TempPos = i。 int m_serial。 //開(kāi)始請(qǐng)求生產(chǎn) printf(Producer %2d sends the produce require.\n,m_serial)。 ReleaseMutex(h_mutex)。 printf(Producer %2d finish producing :\n ,m_serial)。 int m_serial,m_requestNum。 m_requestNum = ((ThreadInfo *)(p))n_request。 Sleep(m_delay)。 //如果對(duì)應(yīng)生產(chǎn)者沒(méi)有生產(chǎn),則等待;如果生產(chǎn)了,允許的消費(fèi)者數(shù)目1;實(shí)現(xiàn)了讀寫(xiě)同步; wait_for_semaphore=WaitForSingleObject(h_Semaphore[m_thread_request[i]],1)。 printf(Consumer%2d begin to consume %2d product \n,m_serial,m_thread_request[i])。 printf( position[ %2d ]:%3d \n ,BufferPos,Buffer_Critical[BufferPos])。PC_Critical[BufferPos])。 最后說(shuō)明一下執(zhí)行的流程。在該信號(hào)處理程序執(zhí)行完后,通過(guò) ret 指令,CPU 會(huì)把控制權(quán)移交給 sa_restorer 所指向的恢復(fù)程序去執(zhí)行。接口說(shuō)明以及局部數(shù)據(jù)結(jié)構(gòu) 程序涉及內(nèi)核中所有有關(guān)信號(hào)處理的函數(shù)。例如,用戶在終端鍵盤(pán)上鍵入 ctrlC 組合鍵來(lái)終止一個(gè)程序的執(zhí)行。本程序給出了設(shè)置和獲取進(jìn)程信號(hào)阻塞碼(屏蔽碼)系統(tǒng)調(diào)用函數(shù) sys_ssetmask()和 sys_sgetmask()、信號(hào)處理系統(tǒng)調(diào)用 sys_singal()(即傳統(tǒng)信號(hào)處理函數(shù) signal())、修改進(jìn)程在收到特定信號(hào)時(shí)所采取的行動(dòng)的系統(tǒng)調(diào)用 sys_sigaction()(既可靠信號(hào)處理函數(shù) sigaction())以及在系統(tǒng)調(diào)用中斷處理程序中處理信號(hào)的函數(shù) do_signal()。但 signal()就是內(nèi)核操作上述傳統(tǒng)信號(hào)處理的方式,在某些特殊時(shí)刻可能會(huì)造成信號(hào)丟失。新的信號(hào)處理句柄是一個(gè)無(wú)返回值且具有一個(gè)整型參數(shù)的函數(shù)指針,該整型參數(shù)用于當(dāng)指定信號(hào)發(fā)生時(shí)內(nèi)核將其傳遞給處理句柄。指針值分別是 0 和 1,這兩個(gè)指針值邏輯上講是實(shí)際程序中不可能出現(xiàn)的函數(shù)地址值。另外,當(dāng)程序fork()一個(gè)子進(jìn)程時(shí),子進(jìn)程會(huì)繼承父進(jìn)程的信號(hào)處理方式(信號(hào)屏蔽碼)。 { signal(SIGINT, sig_handler)。 ... }sigaction()函數(shù)采用了 sigaction 數(shù)據(jù)結(jié)構(gòu)來(lái)保存指定信號(hào)的信息,它是一種可靠的內(nèi)核處理信號(hào)的機(jī)制,它可以讓我們方便地查看或修改指定信號(hào)的處理句柄。當(dāng)參數(shù) act
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1