linux下利用互斥實(shí)現(xiàn)線(xiàn)程訪(fǎng)問(wèn)共享資源(含源文件) (2)

linux下利用互斥實(shí)現(xiàn)線(xiàn)程訪(fǎng)問(wèn)共享資源(含源文件) (2)

ID:11488426

大?。?.03 MB

頁(yè)數(shù):23頁(yè)

時(shí)間:2018-07-12

linux下利用互斥實(shí)現(xiàn)線(xiàn)程訪(fǎng)問(wèn)共享資源(含源文件) (2)_第1頁(yè)
linux下利用互斥實(shí)現(xiàn)線(xiàn)程訪(fǎng)問(wèn)共享資源(含源文件) (2)_第2頁(yè)
linux下利用互斥實(shí)現(xiàn)線(xiàn)程訪(fǎng)問(wèn)共享資源(含源文件) (2)_第3頁(yè)
linux下利用互斥實(shí)現(xiàn)線(xiàn)程訪(fǎng)問(wèn)共享資源(含源文件) (2)_第4頁(yè)
linux下利用互斥實(shí)現(xiàn)線(xiàn)程訪(fǎng)問(wèn)共享資源(含源文件) (2)_第5頁(yè)
資源描述:

《linux下利用互斥實(shí)現(xiàn)線(xiàn)程訪(fǎng)問(wèn)共享資源(含源文件) (2)》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、“計(jì)算機(jī)操作系統(tǒng)”課程設(shè)計(jì)大作業(yè)一、實(shí)驗(yàn)題目:linux下利用互斥實(shí)現(xiàn)線(xiàn)程訪(fǎng)問(wèn)共享資源二、實(shí)驗(yàn)?zāi)康模赫莆站€(xiàn)程創(chuàng)建和終止,加深對(duì)線(xiàn)程和進(jìn)程概念的理解,會(huì)用同步與互斥方法實(shí)現(xiàn)線(xiàn)程之間的通信。三、實(shí)驗(yàn)內(nèi)容事先了解操作系統(tǒng)中經(jīng)典的生產(chǎn)者-消費(fèi)者問(wèn)題,安裝linux虛擬機(jī)(可以用virtualbox或者vmware軟件)。在linux下創(chuàng)建三個(gè)生產(chǎn)者線(xiàn)程(P1,P2,P3)和一個(gè)消費(fèi)者線(xiàn)程(C1),生產(chǎn)者和消費(fèi)者線(xiàn)程共享一個(gè)長(zhǎng)度為2KB的環(huán)型公共緩沖區(qū),生產(chǎn)者向緩沖區(qū)寫(xiě)入消息,消費(fèi)者從緩沖區(qū)中取走消息顯示到屏幕。只要緩沖區(qū)未滿(mǎn),生產(chǎn)者可將

2、消息送入緩沖區(qū);只要緩沖區(qū)未空,消費(fèi)者可從緩沖區(qū)取走一個(gè)消息。每個(gè)消息具下列結(jié)構(gòu)格式:消息長(zhǎng)度(1個(gè)字節(jié)),消息內(nèi)容(n個(gè)字節(jié))。每個(gè)生產(chǎn)者每隔2秒生產(chǎn)一個(gè)消息加入緩沖區(qū),并把消息產(chǎn)生時(shí)間和內(nèi)容記錄在一個(gè)文本文件中。P1每次生產(chǎn)的數(shù)據(jù)為26個(gè)大寫(xiě)字母,P2每次生產(chǎn)的數(shù)據(jù)為26個(gè)小寫(xiě)字母,P3每次生產(chǎn)的數(shù)據(jù)為10個(gè)阿拉伯?dāng)?shù)字。消費(fèi)者C1每隔3秒讀取緩沖區(qū)中的一個(gè)消息并將消息內(nèi)容顯示到屏幕上。用兩種方法(不采線(xiàn)程用互斥和采用線(xiàn)程互斥技術(shù))編寫(xiě)上述功能的程序,對(duì)比兩種程序運(yùn)行結(jié)果有何區(qū)別?不采線(xiàn)程用互斥時(shí)存在什么問(wèn)題?備注:編程中用到

3、的函數(shù)創(chuàng)建線(xiàn)程函數(shù):pthread_create互斥鎖初始化:pthread_mutex_init互斥鎖加鎖:pthread_mutex_lock互斥鎖解鎖:pthread_mutex_unlock四、實(shí)驗(yàn)要求:每人完成一份大作業(yè)實(shí)驗(yàn)報(bào)告。報(bào)告分設(shè)計(jì)思想、數(shù)據(jù)定義、處理流程、源程序、運(yùn)行結(jié)果截圖、設(shè)計(jì)體會(huì)等部分。1)給出數(shù)據(jù)定義和詳細(xì)說(shuō)明;2)給出實(shí)現(xiàn)思想和設(shè)計(jì)流程;3)調(diào)試完成源程序;4)屏幕觀察運(yùn)行結(jié)果;5)總結(jié)自己的設(shè)計(jì)體會(huì);編程語(yǔ)言及操作系統(tǒng)平臺(tái)不限。五、提交內(nèi)容本大作業(yè)每個(gè)人必須單獨(dú)完成。最后需提交的內(nèi)容包括:源程序(

4、關(guān)鍵代碼需要注釋說(shuō)明)、可運(yùn)行程序、算法思路及流程圖、心得體會(huì)。大作業(yè)必須以WORD附件的形式提交。大作業(yè)嚴(yán)禁抄襲。發(fā)現(xiàn)抄襲一律以不及格論。大作業(yè)內(nèi)容要完整,一定要有算法思路、流程圖、心得體會(huì)、運(yùn)行輸出信息截屏等內(nèi)容,如果只提交源代碼則大作業(yè)成績(jī)記為不合格。2016-10-20linux下利用互斥實(shí)現(xiàn)線(xiàn)程訪(fǎng)問(wèn)共享資源一、原理的理解生產(chǎn)者-消費(fèi)者問(wèn)題是一個(gè)經(jīng)典的線(xiàn)程同步問(wèn)題,該問(wèn)題最早由Dijkstra提出,用以演示他提出的信號(hào)量機(jī)制。在同一個(gè)線(xiàn)程地址空間內(nèi)執(zhí)行的兩個(gè)線(xiàn)程。生產(chǎn)者線(xiàn)程生產(chǎn)物品,然后將物品放置在一個(gè)空緩沖區(qū)中供消費(fèi)者

5、線(xiàn)程消費(fèi)。消費(fèi)者線(xiàn)程從緩沖區(qū)中獲得物品,然后釋放緩沖區(qū)。當(dāng)生產(chǎn)者線(xiàn)程生產(chǎn)物品時(shí),如果沒(méi)有空緩沖區(qū)可用,那么生產(chǎn)者線(xiàn)程必須等待消費(fèi)者線(xiàn)程釋放出一個(gè)空緩沖區(qū)。當(dāng)消費(fèi)者線(xiàn)程消費(fèi)物品時(shí),如果沒(méi)有滿(mǎn)的緩沖區(qū),那么消費(fèi)者線(xiàn)程將被阻塞,直到新的物品被生產(chǎn)出來(lái)。多個(gè)生產(chǎn)/消費(fèi)者在有界緩沖上操作。它利用N個(gè)字節(jié)的共享內(nèi)存作為有界循環(huán)緩沖區(qū),利用寫(xiě)一字符模擬放一個(gè)產(chǎn)品,利用讀一字符模擬消費(fèi)一個(gè)產(chǎn)品。當(dāng)緩沖區(qū)空時(shí)消費(fèi)者應(yīng)阻塞睡眠,而當(dāng)緩沖區(qū)滿(mǎn)時(shí)生產(chǎn)者應(yīng)當(dāng)阻塞睡眠。一旦緩沖區(qū)中有空單元,生產(chǎn)者線(xiàn)程就向空單元中入寫(xiě)字符,并報(bào)告寫(xiě)的內(nèi)容和位置。一旦緩沖區(qū)中

6、有未讀過(guò)的字符,消費(fèi)者線(xiàn)程就從該單元中讀出字符,并報(bào)告讀取位置。生產(chǎn)者不能向同一單元中連續(xù)寫(xiě)兩次以上相同的字符,消費(fèi)者也不能從同一單元中連續(xù)讀兩次以上相同的字符。二、完成步驟1、思路分析本作業(yè)是完善課件上的線(xiàn)程綜合實(shí)例的練習(xí)生產(chǎn)者-消費(fèi)者問(wèn)題,重構(gòu)這個(gè)程序的框架,完成性能分析,使之進(jìn)一步理解掌握Linux下線(xiàn)程的同步、通信以及互斥和多線(xiàn)程的安全問(wèn)題。一般情況下,解決互斥方法常用信號(hào)量和互斥鎖,即semaphore和mutex,而解決這個(gè)問(wèn)題,多采用一個(gè)類(lèi)似資源槽的結(jié)構(gòu),每個(gè)槽位標(biāo)示了指向資源的指針以及該槽位的狀態(tài),生產(chǎn)者和消費(fèi)者

7、互斥查詢(xún)資源槽,判斷是否有產(chǎn)品或者有空位可以生產(chǎn),然后根據(jù)指針進(jìn)行相應(yīng)的操作。同時(shí),為了告訴生產(chǎn)者或者消費(fèi)者資源槽的情況,還要有一個(gè)消息傳送機(jī)制,無(wú)論是管道還是線(xiàn)程通信。然而,本次試驗(yàn)有幾個(gè)特殊的要求:A、循環(huán)緩沖。B、除了stderr,stdout等外,只用小于2個(gè)的互斥鎖、C、放棄資源槽分配機(jī)制,采用額外的數(shù)據(jù)結(jié)構(gòu)。D、生產(chǎn)者一直持續(xù)生產(chǎn),形成生產(chǎn)消費(fèi)的良性循環(huán)。首先,使用一個(gè)互斥鎖,意味著資源槽機(jī)制就不能使用了。因?yàn)橘Y源槽雖以用一個(gè)互斥鎖完成,但是需要有額外的通信,如果使用管道通信,則管道也必須是互斥,這就不滿(mǎn)足1個(gè)互斥鎖

8、的要求。其次,要求生產(chǎn)者一直生產(chǎn),這就否定了另外一種方法:消費(fèi)者、生產(chǎn)者的位置均平等,消費(fèi)者消費(fèi)的時(shí)候生產(chǎn)者不能生產(chǎn),生產(chǎn)者生產(chǎn)的時(shí)候消費(fèi)者不能消費(fèi)。因此,就需要采用A要求,也就是循環(huán)鏈表的形式。為了保證互斥要求,需要定義一個(gè)數(shù)據(jù)結(jié)構(gòu),這個(gè)數(shù)據(jù)結(jié)構(gòu)包含兩個(gè)指針,

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

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

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶(hù)上傳,版權(quán)歸屬用戶(hù),天天文庫(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)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶(hù)請(qǐng)聯(lián)系客服處理。