資源描述:
《線(xiàn)程同步機(jī)制實(shí)驗(yàn)報(bào)告材料.doc》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、線(xiàn)程同步機(jī)制實(shí)驗(yàn)報(bào)告一、實(shí)驗(yàn)?zāi)康模和ㄟ^(guò)觀(guān)察共享數(shù)據(jù)資源但不受控制的兩個(gè)線(xiàn)程的并發(fā)運(yùn)行輸出結(jié)果,體會(huì)同步機(jī)制的必要性和重要性。然后利用現(xiàn)有操作系統(tǒng)提供的同步機(jī)制編程實(shí)現(xiàn)關(guān)于該兩個(gè)線(xiàn)程的有序控制,同時(shí)要求根據(jù)同步機(jī)制的Peterson軟件解決方案嘗試自己編程實(shí)現(xiàn)同步機(jī)制和用于同一問(wèn)題的解決,并基于程序運(yùn)行時(shí)間長(zhǎng)短比較兩種同步機(jī)制。二、實(shí)驗(yàn)容:1、基于給定銀行賬戶(hù)間轉(zhuǎn)賬操作模擬代碼作為線(xiàn)程執(zhí)行代碼,在主線(xiàn)程中創(chuàng)建兩個(gè)并發(fā)線(xiàn)程,編程實(shí)現(xiàn)并觀(guān)察程序運(yùn)行結(jié)果和予以解釋說(shuō)明。(無(wú)同步機(jī)制)2、利用Win32API中互斥信號(hào)量操作函數(shù)解決上述線(xiàn)程并發(fā)問(wèn)題,并
2、分析、嘗試和討論線(xiàn)程執(zhí)行體中有關(guān)信號(hào)量操作函數(shù)調(diào)用的正確位置。3、根據(jù)同步機(jī)制的Peterson軟件解決方案嘗試自己編程實(shí)現(xiàn)線(xiàn)程同步機(jī)制和用于上述線(xiàn)程并發(fā)問(wèn)題的解決,并基于程序運(yùn)行時(shí)間長(zhǎng)短將其與基于Win32API互斥信號(hào)量的線(xiàn)程同步機(jī)制的效率展開(kāi)比較。其間,可規(guī)定線(xiàn)程主體代碼循環(huán)執(zhí)行1000000次。三、實(shí)驗(yàn)環(huán)境:操作系統(tǒng):Windows7軟件:VC++6.0四、實(shí)驗(yàn)設(shè)計(jì):l本實(shí)驗(yàn)包含三個(gè)基于并發(fā)線(xiàn)程的程序,第一個(gè)沒(méi)有同步機(jī)制,第二個(gè)利用Win32API中互斥信號(hào)量操作函數(shù)解決線(xiàn)程并發(fā)問(wèn)題,第三個(gè)根據(jù)同步機(jī)制的Peterson軟件解決方案實(shí)
3、現(xiàn)線(xiàn)程同步機(jī)制并解決線(xiàn)程并發(fā)問(wèn)題。三個(gè)程序擁有相同的線(xiàn)程主體:線(xiàn)程主體設(shè)計(jì):do{nTemp1=nAccount1;nTemp2=nAccount2;nRandom=rand();nAccount1=nTemp1+nRandom;nAccount2=nTemp2-nRandom;nLoop++;}while((nAccount1+nAccount2)==0);該線(xiàn)程主體是對(duì)銀行賬戶(hù)間轉(zhuǎn)賬操作模擬的模擬,可知,若并發(fā)的線(xiàn)程不發(fā)生交叉,則依次轉(zhuǎn)賬操作后nAccount1+nAccount2的值永遠(yuǎn)為0,程序不會(huì)跳出循環(huán),如果線(xiàn)程發(fā)生交叉,則經(jīng)過(guò)若
4、干次轉(zhuǎn)賬操作后,就有可能出現(xiàn)nAccount1+nAccount2不為0的情況,此時(shí)程序跳出循環(huán)。本實(shí)驗(yàn)的三個(gè)程序就是基于此線(xiàn)程主體逐步實(shí)現(xiàn)的。l同步機(jī)制的Peterson軟件解決方案二、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):l程序一:沒(méi)有同步機(jī)制說(shuō)明:ThreadFunc(HANDLEThread)為線(xiàn)程函數(shù);nAccount1、aAccount2模擬賬戶(hù);nLoop記錄循環(huán)次數(shù);nRandom是產(chǎn)生的隨機(jī)數(shù)模擬轉(zhuǎn)賬金額;nTemp1、nTemp2用于暫存nAccount1、aAccount2;HANDLEThread[2]創(chuàng)建兩個(gè)線(xiàn)程句柄。l程序二:利用Win3
5、2API中互斥信號(hào)量說(shuō)明:mutex為互斥信號(hào)量;time_start、time_end為線(xiàn)程開(kāi)始運(yùn)行和結(jié)束的時(shí)間;time=time_end-time_start。l程序三:同步機(jī)制的Peterson軟件解決方案說(shuō)明:flag為長(zhǎng)度為2的bool型數(shù)組,turn為整型,flag與turn共同實(shí)現(xiàn)同步機(jī)制的Peterson軟件解決方案;nLoop1記錄線(xiàn)程0的循環(huán)次數(shù);nLoop記錄線(xiàn)程1的循環(huán)次數(shù)。二、算法流程圖:l程序一:沒(méi)有同步機(jī)制l程序二:利用Win32API中互斥信號(hào)量l程序三:同步機(jī)制的Peterson軟件解決方案二、實(shí)驗(yàn)過(guò)程結(jié)果
6、截圖:l程序一:沒(méi)有同步機(jī)制l程序二:利用Win32API中互斥信號(hào)量l程序三:同步機(jī)制的Peterson軟件解決方案二、實(shí)驗(yàn)結(jié)果分析:第一個(gè)程序兩個(gè)線(xiàn)程并發(fā)并沒(méi)有同步機(jī)制,所以產(chǎn)生了nAccount1+nAccount2不為0的情況,程序跳出循環(huán),一個(gè)線(xiàn)程結(jié)束,但剩余的一個(gè)線(xiàn)程自己是無(wú)法跳出循環(huán)的,所以程序一直在運(yùn)行;第二個(gè)程序利用互斥信號(hào)并通過(guò)成功資源資源來(lái)解決并發(fā)帶來(lái)的混亂;第三個(gè)程序通過(guò)同步機(jī)制的Peterson軟件解決方案解決并發(fā)帶來(lái)的混亂;通過(guò)結(jié)果可知,同步機(jī)制的Peterson軟件解決方案的效率要高于利用Win32API中互斥信
7、號(hào)量的方法。二、實(shí)驗(yàn)總結(jié):l實(shí)驗(yàn)心得:通過(guò)本次實(shí)驗(yàn),我鍛煉里自己的編程能力,并對(duì)理論知識(shí)有了進(jìn)一步的理解。對(duì)線(xiàn)程并發(fā)問(wèn)題有了進(jìn)一步的體會(huì),并掌握了同步線(xiàn)程的方法,特別是同步機(jī)制的Peterson軟件解決方案。同時(shí)我也體會(huì)到,學(xué)好這門(mén)課程,不光要掌握好理論,更重要的是要多實(shí)踐,對(duì)實(shí)驗(yàn)現(xiàn)象多加分析研究,才會(huì)融會(huì)貫通所學(xué)的容。l實(shí)驗(yàn)評(píng)價(jià):本實(shí)驗(yàn)按照實(shí)驗(yàn)指導(dǎo)書(shū)完成了要求的全部容,成功得出了結(jié)果。但實(shí)驗(yàn)程序也存在一些潛在的漏洞,比如第三個(gè)程序在多次執(zhí)行中會(huì)出現(xiàn)總的循環(huán)次數(shù)不為1000000的情況,有待進(jìn)一步完善。三、實(shí)驗(yàn)程序清單:l程序一:沒(méi)有同步機(jī)制
8、#include#include#include#includeusingnames