




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
17/20多線(xiàn)程編程的并發(fā)性控制第一部分多線(xiàn)程面臨的挑戰(zhàn) 2第二部分死鎖與活鎖的發(fā)生原因 4第三部分臨界區(qū)的定義與目的 6第四部分悲觀鎖和樂(lè)觀鎖的實(shí)現(xiàn)機(jī)制 8第五部分讀者-寫(xiě)者問(wèn)題與解決方案 10第六部分哲學(xué)家進(jìn)餐問(wèn)題與解決方案 13第七部分生產(chǎn)者-消費(fèi)者問(wèn)題與解決方案 15第八部分管程的結(jié)構(gòu)與使用方法 17
第一部分多線(xiàn)程面臨的挑戰(zhàn)關(guān)鍵詞關(guān)鍵要點(diǎn)資源競(jìng)爭(zhēng)
1.兩個(gè)或多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)共享資源時(shí),可能會(huì)發(fā)生資源競(jìng)爭(zhēng)。這可能導(dǎo)致數(shù)據(jù)不一致和死鎖。
2.資源競(jìng)爭(zhēng)的一個(gè)常見(jiàn)例子是競(jìng)爭(zhēng)共享內(nèi)存中的數(shù)據(jù)。當(dāng)兩個(gè)線(xiàn)程同時(shí)試圖修改相同的內(nèi)存位置時(shí),可能導(dǎo)致數(shù)據(jù)損壞。
3.另一個(gè)常見(jiàn)的資源競(jìng)爭(zhēng)例子是競(jìng)爭(zhēng)硬件資源,如處理器時(shí)間和內(nèi)存。當(dāng)兩個(gè)線(xiàn)程同時(shí)試圖執(zhí)行代碼時(shí),可能會(huì)導(dǎo)致處理器時(shí)間和內(nèi)存的使用效率低下。
死鎖
1.死鎖是指兩個(gè)或多個(gè)線(xiàn)程等待彼此釋放資源的情況。這可能導(dǎo)致系統(tǒng)崩潰。
2.死鎖的一個(gè)常見(jiàn)例子是兩個(gè)線(xiàn)程同時(shí)持有不同的鎖,并等待彼此釋放鎖。這可能會(huì)導(dǎo)致兩個(gè)線(xiàn)程都無(wú)法繼續(xù)執(zhí)行。
3.另一個(gè)常見(jiàn)的死鎖例子是兩個(gè)線(xiàn)程同時(shí)試圖訪(fǎng)問(wèn)同一個(gè)資源,但其中一個(gè)線(xiàn)程已經(jīng)持有該資源的鎖。這可能會(huì)導(dǎo)致兩個(gè)線(xiàn)程都無(wú)法訪(fǎng)問(wèn)該資源。
數(shù)據(jù)不一致
1.數(shù)據(jù)不一致是指兩個(gè)或多個(gè)線(xiàn)程同時(shí)修改共享數(shù)據(jù),導(dǎo)致數(shù)據(jù)不一致的情況。這可能導(dǎo)致程序出現(xiàn)錯(cuò)誤。
2.數(shù)據(jù)不一致的一個(gè)常見(jiàn)例子是兩個(gè)線(xiàn)程同時(shí)修改同一個(gè)變量。這可能會(huì)導(dǎo)致變量的值不正確。
3.另一個(gè)常見(jiàn)的數(shù)據(jù)不一致例子是兩個(gè)線(xiàn)程同時(shí)修改同一個(gè)數(shù)據(jù)庫(kù)表。這可能會(huì)導(dǎo)致數(shù)據(jù)庫(kù)表中的數(shù)據(jù)不一致。多線(xiàn)程面臨的挑戰(zhàn)
多線(xiàn)程并發(fā)性控制是多線(xiàn)程程序設(shè)計(jì)中的重要課題,其復(fù)雜性主要源于以下挑戰(zhàn):
1.原子性違規(guī):
原子性要求一個(gè)操作要么全部完成,要么根本不執(zhí)行,沒(méi)有中間狀態(tài)。在多線(xiàn)程環(huán)境中,多個(gè)線(xiàn)程可能同時(shí)嘗試訪(fǎng)問(wèn)或修改共享數(shù)據(jù),從而導(dǎo)致原子性違規(guī)。例如,如果多個(gè)線(xiàn)程同時(shí)嘗試向同一個(gè)賬戶(hù)轉(zhuǎn)賬,如果沒(méi)有采取同步措施,可能會(huì)導(dǎo)致賬戶(hù)余額計(jì)算錯(cuò)誤。
2.可見(jiàn)性問(wèn)題:
可見(jiàn)性要求當(dāng)一個(gè)線(xiàn)程修改了共享數(shù)據(jù)后,其他線(xiàn)程能夠立即看到這個(gè)改變。在多線(xiàn)程環(huán)境中,由于線(xiàn)程調(diào)度和緩存等因素的影響,一個(gè)線(xiàn)程修改的數(shù)據(jù)可能不會(huì)立即對(duì)其他線(xiàn)程可見(jiàn)。這會(huì)導(dǎo)致其他線(xiàn)程使用舊的數(shù)據(jù),從而導(dǎo)致程序錯(cuò)誤。例如,如果一個(gè)線(xiàn)程修改了一個(gè)變量的值,而另一個(gè)線(xiàn)程立即讀取該變量,如果由于緩存問(wèn)題,讀取到的值仍然是舊的值,那么就會(huì)產(chǎn)生錯(cuò)誤的結(jié)果。
3.一致性問(wèn)題:
一致性要求當(dāng)多個(gè)線(xiàn)程同時(shí)修改共享數(shù)據(jù)時(shí),最終結(jié)果是一致的。在多線(xiàn)程環(huán)境中,由于線(xiàn)程調(diào)度和同步機(jī)制的限制,多個(gè)線(xiàn)程可能以不同的順序執(zhí)行,這可能會(huì)導(dǎo)致最終結(jié)果不一致。例如,如果兩個(gè)線(xiàn)程同時(shí)向同一個(gè)賬戶(hù)轉(zhuǎn)賬,如果先轉(zhuǎn)賬的線(xiàn)程在轉(zhuǎn)賬成功后立即讀取賬戶(hù)余額,而另一個(gè)線(xiàn)程在轉(zhuǎn)賬成功前的某個(gè)時(shí)刻讀取賬戶(hù)余額,則讀取到的余額可能不一致。
4.死鎖:
死鎖是指兩個(gè)或多個(gè)線(xiàn)程都在等待對(duì)方釋放鎖,導(dǎo)致所有線(xiàn)程都無(wú)法繼續(xù)執(zhí)行。在多線(xiàn)程環(huán)境中,當(dāng)多個(gè)線(xiàn)程同時(shí)競(jìng)爭(zhēng)同一個(gè)鎖時(shí),如果鎖的獲取和釋放沒(méi)有得到妥善處理,就可能導(dǎo)致死鎖。例如,如果線(xiàn)程A持有鎖1,并嘗試獲取鎖2,同時(shí)線(xiàn)程B持有鎖2,并嘗試獲取鎖1,那么這兩個(gè)線(xiàn)程就會(huì)陷入死鎖,無(wú)法繼續(xù)執(zhí)行。
5.饑餓:
饑餓是指一個(gè)線(xiàn)程在很長(zhǎng)時(shí)間內(nèi)無(wú)法獲得執(zhí)行機(jī)會(huì),導(dǎo)致該線(xiàn)程無(wú)法完成其任務(wù)。在多線(xiàn)程環(huán)境中,當(dāng)多個(gè)線(xiàn)程同時(shí)競(jìng)爭(zhēng)CPU資源時(shí),如果調(diào)度算法不當(dāng),就可能導(dǎo)致某些線(xiàn)程長(zhǎng)期無(wú)法獲得執(zhí)行的機(jī)會(huì),從而導(dǎo)致饑餓。例如,如果一個(gè)線(xiàn)程優(yōu)先級(jí)很低,而其他線(xiàn)程優(yōu)先級(jí)都很高,那么低優(yōu)先級(jí)的線(xiàn)程就可能會(huì)長(zhǎng)期無(wú)法獲得執(zhí)行機(jī)會(huì)。
6.競(jìng)爭(zhēng)條件:
競(jìng)爭(zhēng)條件是指多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)共享數(shù)據(jù),并且至少有一個(gè)線(xiàn)程的訪(fǎng)問(wèn)不是原子操作,導(dǎo)致數(shù)據(jù)的不一致。在多線(xiàn)程環(huán)境中,當(dāng)多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)共享數(shù)據(jù)時(shí),如果不存在同步機(jī)制來(lái)協(xié)調(diào)線(xiàn)程對(duì)共享資源的訪(fǎng)問(wèn),就可能導(dǎo)致競(jìng)爭(zhēng)條件。例如,如果兩個(gè)線(xiàn)程同時(shí)嘗試修改同一個(gè)變量的值,如果沒(méi)有采取同步措施,那么最終的結(jié)果取決于哪個(gè)線(xiàn)程能夠先修改該變量的值。第二部分死鎖與活鎖的發(fā)生原因關(guān)鍵詞關(guān)鍵要點(diǎn)【死鎖的發(fā)生原因】:
1.資源競(jìng)爭(zhēng):當(dāng)多個(gè)線(xiàn)程同時(shí)請(qǐng)求相同的資源時(shí),就會(huì)發(fā)生資源競(jìng)爭(zhēng)。如果資源不可用,那么這些線(xiàn)程就會(huì)被阻塞,等待資源釋放。
2.循環(huán)等待:當(dāng)每個(gè)線(xiàn)程都持有另一個(gè)線(xiàn)程需要的資源時(shí),就會(huì)形成循環(huán)等待。此時(shí),沒(méi)有任何線(xiàn)程可以繼續(xù)執(zhí)行,整個(gè)系統(tǒng)就會(huì)陷入死鎖。
3.前占式資源分配:當(dāng)線(xiàn)程可以在釋放資源之前獲得新的資源時(shí),就會(huì)發(fā)生前占式資源分配。這可能會(huì)導(dǎo)致死鎖,因?yàn)榫€(xiàn)程可能會(huì)持有過(guò)多的資源,而其他線(xiàn)程無(wú)法獲得它們需要的資源。
【活鎖的發(fā)生原因】:
死鎖與活鎖的發(fā)生原因
#死鎖
資源競(jìng)爭(zhēng)
死鎖的本質(zhì)是資源競(jìng)爭(zhēng),當(dāng)多個(gè)線(xiàn)程同時(shí)請(qǐng)求同一組資源時(shí),就會(huì)產(chǎn)生資源競(jìng)爭(zhēng)。如果資源不可剝奪,即一個(gè)線(xiàn)程一旦獲得資源,就不能被其他線(xiàn)程搶占,那么就有可能導(dǎo)致死鎖。
循環(huán)等待
死鎖的另一個(gè)必要條件是循環(huán)等待,即每個(gè)線(xiàn)程都等待另一個(gè)線(xiàn)程釋放資源,而這個(gè)線(xiàn)程又等待另一個(gè)線(xiàn)程釋放資源,如此循環(huán)下去,最終導(dǎo)致所有線(xiàn)程都無(wú)法繼續(xù)執(zhí)行。
解決方案
*預(yù)防死鎖:
*死鎖避免算法:在資源分配之前,檢查是否有可能發(fā)生死鎖,如果可能,則不進(jìn)行資源分配。
*銀行家算法:一種死鎖避免算法,它通過(guò)跟蹤每個(gè)線(xiàn)程對(duì)資源的需求和當(dāng)前擁有的資源,來(lái)判斷是否有可能發(fā)生死鎖。
*檢測(cè)死鎖:
*死鎖檢測(cè)算法:一種在死鎖發(fā)生后,檢測(cè)死鎖并采取措施解除死鎖的算法。
*超時(shí)機(jī)制:如果一個(gè)線(xiàn)程在一定時(shí)間內(nèi)無(wú)法獲得所需的資源,則認(rèn)為該線(xiàn)程發(fā)生了死鎖,并采取措施解除死鎖。
*解除死鎖:
*資源剝奪:強(qiáng)行從一個(gè)線(xiàn)程手中剝奪資源,并將其分配給另一個(gè)線(xiàn)程。
*回滾:將一個(gè)或多個(gè)線(xiàn)程回滾到之前的一個(gè)狀態(tài),以釋放資源。
*殺死線(xiàn)程:殺死一個(gè)或多個(gè)線(xiàn)程,以釋放資源。
#活鎖
資源依賴(lài)
活鎖是指兩個(gè)或多個(gè)線(xiàn)程相互等待對(duì)方釋放資源,但實(shí)際上這些資源永遠(yuǎn)不會(huì)被釋放。與死鎖不同,活鎖中的線(xiàn)程并沒(méi)有持有對(duì)方所需的資源,而是依賴(lài)于對(duì)方釋放的資源。
解決方案
*避免資源依賴(lài):設(shè)計(jì)程序時(shí),應(yīng)盡量避免資源依賴(lài),即一個(gè)線(xiàn)程不應(yīng)該依賴(lài)于另一個(gè)線(xiàn)程釋放的資源。
*使用鎖:當(dāng)多個(gè)線(xiàn)程需要訪(fǎng)問(wèn)共享資源時(shí),可以使用鎖來(lái)控制對(duì)共享資源的訪(fǎng)問(wèn),以避免活鎖。
*使用死鎖檢測(cè)和解除機(jī)制:如果活鎖發(fā)生,可以使用死鎖檢測(cè)和解除機(jī)制來(lái)解除活鎖。第三部分臨界區(qū)的定義與目的關(guān)鍵詞關(guān)鍵要點(diǎn)【臨界區(qū)的定義】:
1.臨界區(qū)是指一段代碼,它在執(zhí)行時(shí)不能被其他線(xiàn)程打斷。
2.臨界區(qū)通常用于保護(hù)共享資源,以防止多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)同一資源而造成數(shù)據(jù)不一致或損壞。
3.臨界區(qū)通常使用互斥鎖或信號(hào)量等同步機(jī)制來(lái)實(shí)現(xiàn),以確保只有一個(gè)線(xiàn)程能夠在某個(gè)時(shí)刻進(jìn)入臨界區(qū)。
【臨界區(qū)的目的】:
臨界區(qū)的定義與目的
臨界區(qū)(CriticalSection)是指一段代碼,當(dāng)一個(gè)線(xiàn)程進(jìn)入臨界區(qū)時(shí),其他線(xiàn)程必須等待,直到該線(xiàn)程離開(kāi)臨界區(qū)才能繼續(xù)執(zhí)行。臨界區(qū)的目的是確保共享資源在同一時(shí)間內(nèi)只能被一個(gè)線(xiàn)程訪(fǎng)問(wèn),從而防止數(shù)據(jù)損壞或其他問(wèn)題。
臨界區(qū)可以由各種機(jī)制來(lái)實(shí)現(xiàn),如互斥鎖、信號(hào)量和自旋鎖等。其中,互斥鎖是最常用的臨界區(qū)實(shí)現(xiàn)機(jī)制?;コ怄i是一種二進(jìn)制信號(hào)量,它只能取兩個(gè)值:加鎖和解鎖。當(dāng)一個(gè)線(xiàn)程進(jìn)入臨界區(qū)時(shí),它會(huì)先獲取互斥鎖,然后才能執(zhí)行臨界區(qū)內(nèi)的代碼。當(dāng)該線(xiàn)程離開(kāi)臨界區(qū)時(shí),它會(huì)釋放互斥鎖,從而允許其他線(xiàn)程進(jìn)入臨界區(qū)。
臨界區(qū)的使用可以有效地防止共享資源的并發(fā)訪(fǎng)問(wèn),從而確保數(shù)據(jù)的完整性和一致性。但在使用臨界區(qū)時(shí),也需要注意以下幾點(diǎn):
*臨界區(qū)應(yīng)該盡可能地小,只包含必須在互斥環(huán)境下執(zhí)行的代碼。
*臨界區(qū)應(yīng)該避免嵌套,即一個(gè)臨界區(qū)內(nèi)不能再調(diào)用其他臨界區(qū)。否則,可能會(huì)導(dǎo)致死鎖。
*臨界區(qū)應(yīng)該避免長(zhǎng)時(shí)間占用,否則可能會(huì)導(dǎo)致其他線(xiàn)程長(zhǎng)時(shí)間等待,降低系統(tǒng)的性能。
為了避免這些問(wèn)題,可以使用一些優(yōu)化技術(shù),如細(xì)粒度鎖、讀寫(xiě)鎖和無(wú)鎖數(shù)據(jù)結(jié)構(gòu)等。這些技術(shù)可以減少臨界區(qū)的粒度,提高并發(fā)性并降低死鎖的風(fēng)險(xiǎn)。
總之,臨界區(qū)是多線(xiàn)程編程中一種重要的并發(fā)控制機(jī)制,它可以確保共享資源在同一時(shí)間內(nèi)只能被一個(gè)線(xiàn)程訪(fǎng)問(wèn),從而防止數(shù)據(jù)損壞或其他問(wèn)題。在使用臨界區(qū)時(shí),需要注意臨界區(qū)的粒度、嵌套和長(zhǎng)時(shí)間占用等問(wèn)題,并可以使用一些優(yōu)化技術(shù)來(lái)提高臨界區(qū)的性能和安全性。第四部分悲觀鎖和樂(lè)觀鎖的實(shí)現(xiàn)機(jī)制關(guān)鍵詞關(guān)鍵要點(diǎn)【悲觀鎖】:
1.悲觀鎖是以“數(shù)據(jù)庫(kù)行”為單位進(jìn)行鎖定,在查詢(xún)數(shù)據(jù)庫(kù)行時(shí),會(huì)將其鎖定,其他用戶(hù)需要等待該行解鎖后才能進(jìn)行操作。
2.悲觀鎖的實(shí)現(xiàn)方式有兩種:行鎖和表鎖。行鎖僅鎖定當(dāng)前操作的行,而表鎖則鎖定整個(gè)表。
3.悲觀鎖可以保證數(shù)據(jù)的一致性,但由于鎖的機(jī)制,可能會(huì)導(dǎo)致數(shù)據(jù)庫(kù)性能下降。
【樂(lè)觀鎖】:
#悲觀鎖和樂(lè)觀鎖的實(shí)現(xiàn)機(jī)制
悲觀鎖
悲觀鎖又稱(chēng)為悲觀并發(fā)控制,它是以“數(shù)據(jù)在任何時(shí)候都可能遭到破壞”這樣一個(gè)悲觀的態(tài)度看待并發(fā)控制。因此,悲觀并發(fā)控制采取了排他性的加鎖機(jī)制來(lái)防止數(shù)據(jù)遭到破壞。當(dāng)一個(gè)事務(wù)開(kāi)始處理數(shù)據(jù)時(shí),它會(huì)為所涉及的數(shù)據(jù)加上鎖,阻止其他事務(wù)同時(shí)訪(fǎng)問(wèn)被鎖住的數(shù)據(jù)。這樣,數(shù)據(jù)就不會(huì)受到破壞。
悲觀鎖的實(shí)現(xiàn)機(jī)制通常是通過(guò)數(shù)據(jù)庫(kù)的鎖機(jī)制來(lái)實(shí)現(xiàn)的。數(shù)據(jù)庫(kù)中的鎖可以分為表鎖和行鎖。表鎖是對(duì)整個(gè)表進(jìn)行加鎖,而行鎖是對(duì)表中的某一行或某幾行進(jìn)行加鎖。當(dāng)事務(wù)需要對(duì)某張表進(jìn)行操作時(shí),它會(huì)先對(duì)該表加上鎖,然后才能對(duì)表中的數(shù)據(jù)進(jìn)行訪(fǎng)問(wèn)。當(dāng)事務(wù)結(jié)束時(shí),它會(huì)釋放鎖。
悲觀鎖的優(yōu)點(diǎn)是能夠很好地防止數(shù)據(jù)遭到破壞。但是,悲觀鎖也存在一些缺點(diǎn)。首先,悲觀鎖會(huì)降低并發(fā)性。因?yàn)楫?dāng)一個(gè)事務(wù)對(duì)數(shù)據(jù)加上鎖后,其他事務(wù)就無(wú)法訪(fǎng)問(wèn)被鎖住的數(shù)據(jù),這會(huì)降低數(shù)據(jù)庫(kù)的并發(fā)能力。其次,悲觀鎖可能會(huì)導(dǎo)致死鎖。因?yàn)楫?dāng)兩個(gè)事務(wù)同時(shí)對(duì)兩個(gè)數(shù)據(jù)加上鎖時(shí),就會(huì)產(chǎn)生死鎖。
樂(lè)觀鎖
樂(lè)觀鎖又稱(chēng)為樂(lè)觀并發(fā)控制,它是以“數(shù)據(jù)在任何時(shí)候都不會(huì)遭到破壞”這樣一個(gè)樂(lè)觀的態(tài)度看待并發(fā)控制。因此,樂(lè)觀并發(fā)控制采取了非排他性的加鎖機(jī)制來(lái)解決并發(fā)控制問(wèn)題。當(dāng)一個(gè)事務(wù)開(kāi)始處理數(shù)據(jù)時(shí),它不會(huì)對(duì)數(shù)據(jù)加上鎖,而是記錄下該數(shù)據(jù)在事務(wù)開(kāi)始處理時(shí)的狀態(tài)。當(dāng)事務(wù)結(jié)束時(shí),它會(huì)將數(shù)據(jù)修改后的狀態(tài)與事務(wù)開(kāi)始處理時(shí)的狀態(tài)進(jìn)行比較,如果數(shù)據(jù)在事務(wù)開(kāi)始處理時(shí)與事務(wù)結(jié)束時(shí)是相同的,那么事務(wù)就可以提交數(shù)據(jù)。否則,事務(wù)就會(huì)回滾。
樂(lè)觀鎖的實(shí)現(xiàn)機(jī)制通常是通過(guò)數(shù)據(jù)庫(kù)中的版本號(hào)來(lái)實(shí)現(xiàn)的。數(shù)據(jù)庫(kù)中的每一行數(shù)據(jù)都會(huì)有一個(gè)版本號(hào),當(dāng)事務(wù)開(kāi)始處理數(shù)據(jù)時(shí),它會(huì)記錄下該數(shù)據(jù)的版本號(hào)。當(dāng)事務(wù)結(jié)束時(shí),它會(huì)將數(shù)據(jù)修改后的版本號(hào)與事務(wù)開(kāi)始處理時(shí)的版本號(hào)進(jìn)行比較,如果數(shù)據(jù)的版本號(hào)在事務(wù)開(kāi)始處理時(shí)與事務(wù)結(jié)束時(shí)是相同的,那么事務(wù)就可以提交數(shù)據(jù)。否則,事務(wù)就會(huì)回滾。
樂(lè)觀鎖的優(yōu)點(diǎn)是能夠提高并發(fā)性。因?yàn)闃?lè)觀鎖不會(huì)對(duì)數(shù)據(jù)加上鎖,所以其他事務(wù)可以同時(shí)對(duì)數(shù)據(jù)進(jìn)行訪(fǎng)問(wèn)。樂(lè)觀鎖的缺點(diǎn)是可能會(huì)導(dǎo)致數(shù)據(jù)遭到破壞。因?yàn)楫?dāng)兩個(gè)事務(wù)同時(shí)對(duì)同一個(gè)數(shù)據(jù)進(jìn)行修改時(shí),兩個(gè)事務(wù)都會(huì)認(rèn)為數(shù)據(jù)在事務(wù)開(kāi)始處理時(shí)與事務(wù)結(jié)束時(shí)是相同的,那么兩個(gè)事務(wù)都可以提交數(shù)據(jù),這會(huì)導(dǎo)致數(shù)據(jù)遭到破壞。第五部分讀者-寫(xiě)者問(wèn)題與解決方案關(guān)鍵詞關(guān)鍵要點(diǎn)【讀者-寫(xiě)者問(wèn)題】:
1.問(wèn)題描述:讀者-寫(xiě)者問(wèn)題是一個(gè)經(jīng)典的多線(xiàn)程并發(fā)控制問(wèn)題,描述了多個(gè)讀者和一個(gè)或多個(gè)寫(xiě)者同時(shí)訪(fǎng)問(wèn)共享數(shù)據(jù)的場(chǎng)景,其中讀者只能讀取數(shù)據(jù),而寫(xiě)者可以修改數(shù)據(jù)。
2.問(wèn)題關(guān)鍵:如何協(xié)調(diào)讀者和寫(xiě)者的訪(fǎng)問(wèn),以保證數(shù)據(jù)的完整性(防止讀者在寫(xiě)者寫(xiě)入數(shù)據(jù)時(shí)讀取到不一致的數(shù)據(jù))和寫(xiě)者的獨(dú)占性(防止多個(gè)寫(xiě)者同時(shí)修改數(shù)據(jù))。
3.解決方案:為了解決讀者-寫(xiě)者問(wèn)題,提出了多種并發(fā)控制策略,包括:
-讀者優(yōu)先策略:允許多個(gè)讀者同時(shí)讀取數(shù)據(jù),但當(dāng)有寫(xiě)者請(qǐng)求修改數(shù)據(jù)時(shí),所有讀者必須等待寫(xiě)者完成修改。
-寫(xiě)者優(yōu)先策略:允許寫(xiě)者獨(dú)占地修改數(shù)據(jù),當(dāng)有讀者請(qǐng)求讀取數(shù)據(jù)時(shí),寫(xiě)者必須等待讀者完成讀取。
-優(yōu)先級(jí)策略:根據(jù)讀者和寫(xiě)者的優(yōu)先級(jí)來(lái)決定誰(shuí)可以訪(fǎng)問(wèn)數(shù)據(jù)。
-信號(hào)量策略:使用信號(hào)量來(lái)協(xié)調(diào)讀者和寫(xiě)者的訪(fǎng)問(wèn),確保數(shù)據(jù)的完整性和寫(xiě)者的獨(dú)占性。
【讀者-寫(xiě)者問(wèn)題的解決方案】:
讀者-寫(xiě)者問(wèn)題與解決方案
#讀者-寫(xiě)者問(wèn)題
讀者-寫(xiě)者問(wèn)題是經(jīng)典的并發(fā)控制問(wèn)題之一,它描述了一個(gè)共享資源(例如一個(gè)數(shù)據(jù)庫(kù))由多個(gè)讀者和一個(gè)寫(xiě)者同時(shí)訪(fǎng)問(wèn)的情況。讀者可以同時(shí)訪(fǎng)問(wèn)該資源,而寫(xiě)者在訪(fǎng)問(wèn)該資源時(shí)需要獨(dú)占該資源。
讀者-寫(xiě)者問(wèn)題的目標(biāo)是設(shè)計(jì)一種并發(fā)控制機(jī)制,以確保讀者和寫(xiě)者能夠同時(shí)訪(fǎng)問(wèn)共享資源,而不會(huì)發(fā)生數(shù)據(jù)不一致的情況。
#讀者優(yōu)先解決方案
讀者優(yōu)先解決方案是一種常用的讀者-寫(xiě)者問(wèn)題解決方案。該解決方案允許讀者優(yōu)先訪(fǎng)問(wèn)共享資源,而寫(xiě)者只能在沒(méi)有讀者訪(fǎng)問(wèn)該資源時(shí)才能訪(fǎng)問(wèn)該資源。
讀者優(yōu)先解決方案的實(shí)現(xiàn)方式如下:
*將共享資源的訪(fǎng)問(wèn)權(quán)限分為兩種:讀鎖和寫(xiě)鎖。
*當(dāng)一個(gè)讀者想要訪(fǎng)問(wèn)共享資源時(shí),它會(huì)獲取一個(gè)讀鎖。
*當(dāng)一個(gè)寫(xiě)者想要訪(fǎng)問(wèn)共享資源時(shí),它會(huì)獲取一個(gè)寫(xiě)鎖。
*如果一個(gè)寫(xiě)者想要獲取寫(xiě)鎖,而此時(shí)共享資源已經(jīng)被一個(gè)或多個(gè)讀者鎖定了,那么寫(xiě)者需要等待,直到所有的讀者都釋放了讀鎖。
*如果一個(gè)讀者想要獲取讀鎖,而此時(shí)共享資源已經(jīng)被一個(gè)寫(xiě)者鎖定了,那么讀者可以繼續(xù)獲取讀鎖,但它必須等待,直到寫(xiě)者釋放了寫(xiě)鎖。
#寫(xiě)者優(yōu)先解決方案
寫(xiě)者優(yōu)先解決方案是一種常用的讀者-寫(xiě)者問(wèn)題解決方案。該解決方案允許寫(xiě)者優(yōu)先訪(fǎng)問(wèn)共享資源,而讀者只能在沒(méi)有寫(xiě)者訪(fǎng)問(wèn)該資源時(shí)才能訪(fǎng)問(wèn)該資源。
寫(xiě)者優(yōu)先解決方案的實(shí)現(xiàn)方式如下:
*將共享資源的訪(fǎng)問(wèn)權(quán)限分為兩種:讀鎖和寫(xiě)鎖。
*當(dāng)一個(gè)讀者想要訪(fǎng)問(wèn)共享資源時(shí),它會(huì)獲取一個(gè)讀鎖。
*當(dāng)一個(gè)寫(xiě)者想要訪(fǎng)問(wèn)共享資源時(shí),它會(huì)獲取一個(gè)寫(xiě)鎖。
*如果一個(gè)寫(xiě)者想要獲取寫(xiě)鎖,而此時(shí)共享資源已經(jīng)被一個(gè)或多個(gè)讀者鎖定了,那么寫(xiě)者可以繼續(xù)獲取寫(xiě)鎖,但它必須等待,直到所有的讀者都釋放了讀鎖。
*如果一個(gè)讀者想要獲取讀鎖,而此時(shí)共享資源已經(jīng)被一個(gè)寫(xiě)者鎖定了,那么讀者需要等待,直到寫(xiě)者釋放了寫(xiě)鎖。
#兩階段鎖定協(xié)議
兩階段鎖定協(xié)議是一種常用的讀者-寫(xiě)者問(wèn)題解決方案。該協(xié)議將讀者和寫(xiě)者的訪(fǎng)問(wèn)分為兩個(gè)階段:獲取鎖階段和釋放鎖階段。
兩階段鎖定協(xié)議的實(shí)現(xiàn)方式如下:
*當(dāng)一個(gè)讀者想要訪(fǎng)問(wèn)共享資源時(shí),它會(huì)先獲取一個(gè)讀鎖,然后在釋放讀鎖之前獲取一個(gè)寫(xiě)鎖。
*當(dāng)一個(gè)寫(xiě)者想要訪(fǎng)問(wèn)共享資源時(shí),它會(huì)先獲取一個(gè)寫(xiě)鎖,然后在釋放寫(xiě)鎖之前獲取一個(gè)讀鎖。
*如果一個(gè)讀鎖和一個(gè)寫(xiě)鎖同時(shí)請(qǐng)求訪(fǎng)問(wèn)共享資源,那么寫(xiě)鎖優(yōu)先。
*如果兩個(gè)讀鎖同時(shí)請(qǐng)求訪(fǎng)問(wèn)共享資源,那么兩個(gè)讀鎖都可以訪(fǎng)問(wèn)共享資源。
#總結(jié)
讀者-寫(xiě)者問(wèn)題是一個(gè)經(jīng)典的并發(fā)控制問(wèn)題,它描述了一個(gè)共享資源由多個(gè)讀者和一個(gè)寫(xiě)者同時(shí)訪(fǎng)問(wèn)的情況。讀者-寫(xiě)者問(wèn)題有多種解決方案,包括讀者優(yōu)先解決方案、寫(xiě)者優(yōu)先解決方案和兩階段鎖定協(xié)議。第六部分哲學(xué)家進(jìn)餐問(wèn)題與解決方案關(guān)鍵詞關(guān)鍵要點(diǎn)【哲學(xué)家進(jìn)餐問(wèn)題】:
1.問(wèn)題描述:哲學(xué)家進(jìn)餐問(wèn)題描述了五個(gè)哲學(xué)家坐在一個(gè)圓桌旁,并共用五個(gè)叉子吃飯的情況。每個(gè)哲學(xué)家都有兩個(gè)叉子,一個(gè)在自己左邊,另一個(gè)在自己右邊。哲學(xué)家只能用自己左邊的叉子和右邊的叉子吃飯,并且不能同時(shí)使用兩個(gè)叉子。當(dāng)一個(gè)哲學(xué)家想吃飯時(shí),他必須先拿起自己左邊的叉子,然后再拿起自己右邊的叉子。如果一個(gè)哲學(xué)家拿起自己左邊的叉子,發(fā)現(xiàn)自己右邊的叉子已被其他哲學(xué)家拿起,那么他必須放下自己左邊的叉子,并等待其他哲學(xué)家放下右邊的叉子。
2.死鎖問(wèn)題:哲學(xué)家進(jìn)餐問(wèn)題中可能出現(xiàn)死鎖問(wèn)題。死鎖是指兩個(gè)或多個(gè)哲學(xué)家互相等待對(duì)方放下叉子,導(dǎo)致所有哲學(xué)家都無(wú)法繼續(xù)吃飯的情況。
3.解決方法:哲學(xué)家進(jìn)餐問(wèn)題可以通過(guò)各種方法來(lái)解決。一種方法是使用信號(hào)量來(lái)控制對(duì)叉子的訪(fǎng)問(wèn)。另一種方法是使用優(yōu)先級(jí)來(lái)控制對(duì)叉子的訪(fǎng)問(wèn)。
【可口可樂(lè)的原料比例問(wèn)題】:
#《多線(xiàn)程編程的并發(fā)性控制》之哲學(xué)家進(jìn)餐問(wèn)題與解決方案
哲學(xué)家進(jìn)餐問(wèn)題及挑戰(zhàn)
哲學(xué)家進(jìn)餐問(wèn)題是計(jì)算機(jī)科學(xué)中一個(gè)經(jīng)典的并發(fā)編程問(wèn)題,它通過(guò)五個(gè)哲學(xué)家圍坐在一張圓桌旁試圖進(jìn)餐來(lái)形象地說(shuō)明并發(fā)進(jìn)程在競(jìng)爭(zhēng)共享資源時(shí)可能面臨的死鎖或饑餓問(wèn)題。
哲學(xué)家之間有如下規(guī)則:
1.每個(gè)哲學(xué)家都有兩根筷子,并且只關(guān)心自己是否能夠同時(shí)拿到兩根筷子,從而開(kāi)始進(jìn)餐。
2.在同一時(shí)刻,最多只有兩個(gè)哲學(xué)家能夠同時(shí)進(jìn)餐。
3.哲學(xué)家不能同時(shí)使用兩根筷子。
解決方案:限制獲取筷子的數(shù)量
一種簡(jiǎn)單的解決方案是限制哲學(xué)家獲取筷子的數(shù)量,從而確保任何時(shí)刻最多只有兩個(gè)哲學(xué)家能夠同時(shí)進(jìn)餐。
具體實(shí)現(xiàn)方式:
1.為每個(gè)筷子創(chuàng)建一個(gè)互斥鎖。
2.為每個(gè)哲學(xué)家創(chuàng)建一個(gè)線(xiàn)程,線(xiàn)程將循環(huán)執(zhí)行以下步驟:
*嘗試獲取左邊的筷子的互斥鎖。
*如果成功,則嘗試獲取右邊的筷子的互斥鎖。
*如果成功,則開(kāi)始進(jìn)餐。
*進(jìn)餐結(jié)束后,釋放左右筷子的互斥鎖。
3.確保每個(gè)哲學(xué)家在獲取筷子時(shí)按照相同的順序進(jìn)行,這樣可以避免死鎖。
這種方法簡(jiǎn)單易懂,但存在一些問(wèn)題:
1.哲學(xué)家進(jìn)餐的速度是一樣的嗎?如果一個(gè)哲學(xué)家進(jìn)餐很快,那么另一個(gè)哲學(xué)家可能不得不等待很長(zhǎng)時(shí)間才能拿到筷子。
2.哲學(xué)家在獲取筷子時(shí)是否會(huì)發(fā)生爭(zhēng)搶?zhuān)咳绻l(fā)生爭(zhēng)搶?zhuān)敲纯赡軙?huì)導(dǎo)致死鎖。
解決方案:使用信號(hào)量
為了解決上述問(wèn)題,可以使用信號(hào)量來(lái)控制哲學(xué)家獲取筷子的順序。
信號(hào)量是一種同步機(jī)制,它允許一個(gè)線(xiàn)程等待另一個(gè)線(xiàn)程完成某個(gè)操作。
具體實(shí)現(xiàn)方式:
1.為左右筷子各創(chuàng)建一個(gè)信號(hào)量,初始值為1。
2.為每個(gè)哲學(xué)家創(chuàng)建一個(gè)線(xiàn)程,線(xiàn)程將循環(huán)執(zhí)行以下步驟:
*嘗試獲取左邊的筷子的信號(hào)量。
*如果成功,則嘗試獲取右邊的筷子的信號(hào)量。
*如果成功,則開(kāi)始進(jìn)餐。
*進(jìn)餐結(jié)束后,釋放左右筷子的信號(hào)量。
3.確保每個(gè)哲學(xué)家在獲取筷子時(shí)按照相同的順序進(jìn)行,這樣可以避免死鎖。
這種方法可以確保哲學(xué)家進(jìn)餐的速度是相同的,并且不會(huì)發(fā)生爭(zhēng)搶。
總結(jié)
哲學(xué)家進(jìn)餐問(wèn)題是一個(gè)經(jīng)典的并發(fā)編程問(wèn)題,它通過(guò)形象的比喻說(shuō)明了并發(fā)進(jìn)程在競(jìng)爭(zhēng)共享資源時(shí)可能面臨的死鎖或饑餓問(wèn)題。通過(guò)使用信號(hào)量,我們可以解決這個(gè)問(wèn)題,并確保所有哲學(xué)家能夠公平地進(jìn)餐。第七部分生產(chǎn)者-消費(fèi)者問(wèn)題與解決方案關(guān)鍵詞關(guān)鍵要點(diǎn)【生產(chǎn)者-消費(fèi)者問(wèn)題】:
1.生產(chǎn)者-消費(fèi)者問(wèn)題描述:在并發(fā)編程中,多個(gè)生產(chǎn)者線(xiàn)程負(fù)責(zé)生成數(shù)據(jù),多個(gè)消費(fèi)者線(xiàn)程負(fù)責(zé)消費(fèi)數(shù)據(jù)時(shí),如果生產(chǎn)者生成數(shù)據(jù)的速度快于消費(fèi)者消費(fèi)數(shù)據(jù)的速度,就會(huì)導(dǎo)致數(shù)據(jù)堆積,從而浪費(fèi)內(nèi)存空間;如果消費(fèi)者消費(fèi)數(shù)據(jù)的速度快于生產(chǎn)者生成數(shù)據(jù)的速度,就會(huì)導(dǎo)致消費(fèi)者等待,從而浪費(fèi)CPU時(shí)間。解決這個(gè)問(wèn)題需要一種機(jī)制來(lái)協(xié)調(diào)生產(chǎn)者和消費(fèi)者的速度,以確保數(shù)據(jù)生產(chǎn)和消費(fèi)之間的平衡。
2.經(jīng)典的生產(chǎn)者-消費(fèi)者問(wèn)題解決方案:緩沖區(qū)(Buffer):一個(gè)共享的內(nèi)存區(qū)域,用以在生產(chǎn)者和消費(fèi)者之間交換數(shù)據(jù)。
信號(hào)量(Semaphore):一種同步機(jī)制,用于協(xié)調(diào)生產(chǎn)者和消費(fèi)者的訪(fǎng)問(wèn)。
生產(chǎn)者線(xiàn)程:當(dāng)緩沖區(qū)為空時(shí),生產(chǎn)者線(xiàn)程將數(shù)據(jù)放入緩沖區(qū),并對(duì)緩沖區(qū)進(jìn)行加鎖;當(dāng)緩沖區(qū)已滿(mǎn)時(shí),生產(chǎn)者線(xiàn)程等待,直到緩沖區(qū)有空閑空間。
消費(fèi)者線(xiàn)程:當(dāng)緩沖區(qū)不為空時(shí),消費(fèi)者線(xiàn)程從緩沖區(qū)中取出數(shù)據(jù),并對(duì)緩沖區(qū)進(jìn)行解鎖;當(dāng)緩沖區(qū)為空時(shí),消費(fèi)者線(xiàn)程等待,直到緩沖區(qū)中有數(shù)據(jù)。
【同步機(jī)制】:
生產(chǎn)者-消費(fèi)者問(wèn)題與解決方案
生產(chǎn)者-消費(fèi)者問(wèn)題是一個(gè)經(jīng)典的并行編程問(wèn)題,它描述了兩個(gè)或多個(gè)線(xiàn)程如何共享一個(gè)緩沖區(qū)。在生產(chǎn)者-消費(fèi)者問(wèn)題中,生產(chǎn)者線(xiàn)程將數(shù)據(jù)放入緩沖區(qū),而消費(fèi)者線(xiàn)程從緩沖區(qū)中取出數(shù)據(jù)。這個(gè)共享的緩沖區(qū)有有限的容量,因此生產(chǎn)者線(xiàn)程不能在緩沖區(qū)已滿(mǎn)時(shí)繼續(xù)生產(chǎn)數(shù)據(jù),而消費(fèi)者線(xiàn)程不能在緩沖區(qū)為空時(shí)繼續(xù)消費(fèi)數(shù)據(jù)。
生產(chǎn)者-消費(fèi)者問(wèn)題有幾種不同的解決方案,最常見(jiàn)的是使用信號(hào)量來(lái)控制對(duì)緩沖區(qū)的訪(fǎng)問(wèn)。信號(hào)量是一種同步原語(yǔ),它允許線(xiàn)程等待某個(gè)條件的滿(mǎn)足。在生產(chǎn)者-消費(fèi)者問(wèn)題中,可以使用兩個(gè)信號(hào)量來(lái)控制對(duì)緩沖區(qū)的訪(fǎng)問(wèn):滿(mǎn)信號(hào)量(fullsemaphore)和空信號(hào)量(emptysemaphore)。
滿(mǎn)信號(hào)量用于控制生產(chǎn)者線(xiàn)程對(duì)緩沖區(qū)的訪(fǎng)問(wèn)。當(dāng)緩沖區(qū)已滿(mǎn)時(shí),滿(mǎn)信號(hào)量為0,這表示生產(chǎn)者線(xiàn)程不能繼續(xù)生產(chǎn)數(shù)據(jù)。當(dāng)緩沖區(qū)中有空閑空間時(shí),滿(mǎn)信號(hào)量為正數(shù),這表示生產(chǎn)者線(xiàn)程可以繼續(xù)生產(chǎn)數(shù)據(jù)。
空信號(hào)量用于控制消費(fèi)者線(xiàn)程對(duì)緩沖區(qū)的訪(fǎng)問(wèn)。當(dāng)緩沖區(qū)為空時(shí),空信號(hào)量為0,這表示消費(fèi)者線(xiàn)程不能繼續(xù)消費(fèi)數(shù)據(jù)。當(dāng)緩沖區(qū)中有數(shù)據(jù)時(shí),空信號(hào)量為正數(shù),這表示消費(fèi)者線(xiàn)程可以繼續(xù)消費(fèi)數(shù)據(jù)。
生產(chǎn)者線(xiàn)程在生產(chǎn)數(shù)據(jù)之前,首先檢查滿(mǎn)信號(hào)量是否為0。如果滿(mǎn)信號(hào)量為0,則表示緩沖區(qū)已滿(mǎn),生產(chǎn)者線(xiàn)程必須等待。當(dāng)緩沖區(qū)中有空閑空間時(shí),滿(mǎn)信號(hào)量為正數(shù),生產(chǎn)者線(xiàn)程可以生產(chǎn)數(shù)據(jù)并遞減滿(mǎn)信號(hào)量。
消費(fèi)者線(xiàn)程在消費(fèi)數(shù)據(jù)之前,首先檢查空信號(hào)量是否為0。如果空信號(hào)量為0,則表示緩沖區(qū)為空,消費(fèi)者線(xiàn)程必須等待。當(dāng)緩沖區(qū)中有數(shù)據(jù)時(shí),空信號(hào)量為正數(shù),消費(fèi)者線(xiàn)程可以消費(fèi)數(shù)據(jù)并遞增空信號(hào)量。
使用信號(hào)量來(lái)控制對(duì)緩沖區(qū)的訪(fǎng)問(wèn)可以有效地防止生產(chǎn)者線(xiàn)程和消費(fèi)者線(xiàn)程同時(shí)訪(fǎng)問(wèn)緩沖區(qū),從而避免數(shù)據(jù)損壞。
除了使用信號(hào)量之外,還可以使用其他方法來(lái)解決生產(chǎn)者-消費(fèi)者問(wèn)題,例如使用管道、消息隊(duì)列和共享內(nèi)存。第八部分管程的結(jié)構(gòu)與使用方法關(guān)鍵詞關(guān)鍵要點(diǎn)【管程的定義】:
1.管程是一個(gè)共享的程序段,具有共享變量和原語(yǔ)操作。
2.原語(yǔ)操作是只能由一個(gè)進(jìn)程在同一時(shí)間執(zhí)行的,從而保證共享變量的正確性。
3.管程的結(jié)構(gòu):由一個(gè)管程定義和若干個(gè)管程調(diào)用組成。
【管程的并發(fā)性控制】:
#管程的結(jié)構(gòu)與使用方法
在多線(xiàn)程編程中,管程是一種用于實(shí)現(xiàn)線(xiàn)程同步和通信的基本機(jī)制。管程由以下組成:
-變量:管程包含一組共享變量,這些變量只能由管程內(nèi)的線(xiàn)程訪(fǎng)問(wèn)。
-操
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度寧夏回族自治區(qū)護(hù)師類(lèi)之主管護(hù)師能力測(cè)試試卷A卷附答案
- 語(yǔ)文(廣東卷01)(參考答案)
- 2025年全國(guó)大學(xué)生趣味百科知識(shí)競(jìng)賽題庫(kù)及答案(630題)
- 工作匯報(bào)年終總結(jié)模板
- 2025年河北秦皇島市夷齊建筑工程有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年浙江湖州長(zhǎng)興圖興物業(yè)管理有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年浙江淳安誠(chéng)惠人力資源開(kāi)發(fā)有限公司招聘筆試參考題庫(kù)含答案解析
- 2025年中國(guó)出版集團(tuán)東方出版中心有限公司招聘筆試參考題庫(kù)含答案解析
- 2025年一建《機(jī)電工程管理與實(shí)務(wù)》考試質(zhì)量控制與驗(yàn)收真題回顧與預(yù)測(cè)題庫(kù)
- 2025水利水電工程主體結(jié)構(gòu)勞務(wù)分包合同
- 2022統(tǒng)計(jì)執(zhí)法資格考試題庫(kù)(含答案)
- 天然藥物研究的回顧與展望課件
- 通信線(xiàn)路工程施工技術(shù)規(guī)范(新)
- 很全的禮品qq群
- Unit15-The-necklace-reading-公開(kāi)課一等獎(jiǎng)?wù)n件-高中英語(yǔ)
- 《貝葉斯統(tǒng)計(jì)》課程教學(xué)大綱
- Q∕GDW 10202-2021 國(guó)家電網(wǎng)有限公司應(yīng)急指揮中心建設(shè)規(guī)范
- 審計(jì)實(shí)施方案模板格式
- (高清版)民用建筑修繕工程施工標(biāo)準(zhǔn)JGJ_T 112-2019
- 工程測(cè)量報(bào)價(jià)單
- 學(xué)習(xí)解讀2022年《關(guān)于加快推進(jìn)政務(wù)服務(wù)標(biāo)準(zhǔn)化規(guī)范化便利化的指導(dǎo)意見(jiàn)》實(shí)用PPT動(dòng)態(tài)課件
評(píng)論
0/150
提交評(píng)論