




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 課程設(shè)計報告課程名稱: 操作系統(tǒng) 班 級: 1305022 學(xué) 號: 11 姓 名: 牟 黎 明 指導(dǎo)教師: 龔茗茗老師 計算機(jī)工程學(xué)院時間:2016.06.06-2016.06.12目 錄一、實驗概述11實驗?zāi)康?2實驗?zāi)繕?biāo)13、具體要求如下:14、實驗工具2二、實驗過程21、實驗題目分析22、算法流程23、算法實現(xiàn)34、關(guān)鍵問題35、關(guān)鍵代碼分析31.定義的變量:32.關(guān)鍵函數(shù):4CreateThread4信號量對象(semaphore)4等待操作5生產(chǎn)者消費(fèi)者函數(shù)66、程序代碼及注釋:8三、實驗結(jié)果與總結(jié)91、實驗結(jié)果92、實驗總結(jié)9參考文獻(xiàn)11附錄:111305022 班 11 牟黎
2、明 第2頁 目錄 共1頁一、實驗概述1實驗?zāi)康?、熟悉臨界資源、信號量及PV操作的定義與物理意義。2、了解進(jìn)程通信的方法。3、掌握進(jìn)程互斥與進(jìn)程同步的相關(guān)知識4、掌握用信號量機(jī)制解決進(jìn)程間的同步和互斥問題。5、實現(xiàn)生產(chǎn)者消費(fèi)者問題,深刻理解進(jìn)程同步問題。2實驗?zāi)繕?biāo)在Linux操作系統(tǒng)下用C實現(xiàn)經(jīng)典進(jìn)程同步問題:生產(chǎn)者消費(fèi)者問題。3、具體要求如下:1、緩沖區(qū)大小為5,初始狀態(tài)為空。2、2個生產(chǎn)者,隨機(jī)等待一段時間,往緩沖區(qū)中添加數(shù)據(jù),若緩沖區(qū)已滿,等待消費(fèi)者取走數(shù)據(jù)之后再添加,重復(fù)5次3、2個消費(fèi)者,隨機(jī)等待一段時間,從緩沖區(qū)中讀取數(shù)據(jù),若緩沖區(qū)為空,等待生產(chǎn)者添加數(shù)據(jù)之后再讀取,重復(fù)5次。 生
3、產(chǎn)者 Buffer(大小為5) 消費(fèi)者 4、實驗工具開發(fā)環(huán)境:Visual C+ 6.0二、實驗過程1、實驗題目分析 本實驗要求利用PV操作實現(xiàn)解決生產(chǎn)者消費(fèi)者問題中的同步問題。此問題描述的是2個生產(chǎn)者進(jìn)程在生產(chǎn)產(chǎn)品并將這些產(chǎn)品提供給消費(fèi)者進(jìn)程去消費(fèi),在兩者之間設(shè)置了一個具有5個緩沖區(qū)的緩沖池,生產(chǎn)者進(jìn)程將它所生產(chǎn)的產(chǎn)品放入一個緩沖區(qū),消費(fèi)者進(jìn)程可從緩沖區(qū)中取走產(chǎn)品去消費(fèi),但它們之間必須保持同步,即不允許消費(fèi)者進(jìn)程到一個空緩沖區(qū)去取產(chǎn)品,也不允許生產(chǎn)者進(jìn)程向一個已裝滿且尚未取出的緩沖區(qū)中投放產(chǎn)品,并且生產(chǎn)者消費(fèi)者互斥使用緩沖區(qū),定義信號量來實現(xiàn)互斥使。2、算法流程 3、算法實現(xiàn)主要用到生產(chǎn)者函
4、數(shù)DWORD WINAPI Producer(LPVOID para)來實現(xiàn)緩沖區(qū)產(chǎn)品數(shù)量的增加,用DWORD WINAPI Consumer(LPVOID para)來實現(xiàn)緩沖區(qū)產(chǎn)品的減少。并用到了CreateThread函數(shù)來創(chuàng)建生產(chǎn)者消費(fèi)者線程,利用線程的句柄以及創(chuàng)建線程是立刻運(yùn)行的特點(diǎn)來進(jìn)行生產(chǎn)消費(fèi)操作。至于PV算法的實現(xiàn)是利用mutex、empty和full,3個信號量來進(jìn)行控制, empty的值可以看做資源量,即當(dāng)前緩沖區(qū)的大小,初始化為緩沖區(qū)的大小,只有empty的數(shù)值大于0才可以進(jìn)行生產(chǎn), full的數(shù)值與empty的值有對應(yīng)的關(guān)系,利用full來控制消費(fèi)的進(jìn)行。用mutex來
5、實現(xiàn)信號的同步于互斥,當(dāng)p(mutex)能申請時,就鎖住緩沖區(qū),供自己使用,使用完后,用v(mutex)來釋放。4、關(guān)鍵問題 利用生產(chǎn)者進(jìn)程進(jìn)行生產(chǎn),同時消費(fèi)者進(jìn)程也能進(jìn)行消費(fèi),但是必須滿足同步的條件才可以允許,否則將提示緩沖區(qū)滿無法進(jìn)行生產(chǎn)或者緩沖區(qū)空無法進(jìn)行消費(fèi)的錯誤,其次,必須對公用的臨界資源進(jìn)行互斥使用,生產(chǎn)者生產(chǎn)時消費(fèi)者不能使用緩沖區(qū),故程序應(yīng)該具有判斷的功能。若結(jié)束當(dāng)前的生產(chǎn)者消費(fèi)者進(jìn)程,將會提示此次進(jìn)程中生產(chǎn)消費(fèi)者分別生產(chǎn)了和消費(fèi)的產(chǎn)品數(shù)目,并統(tǒng)計緩沖區(qū)中剩余的產(chǎn)品數(shù)目,最后才結(jié)束。5、關(guān)鍵代碼分析1.定義的變量:#define BUFFER_NUM 5 /* 緩沖區(qū)個數(shù) */
6、struct Buffer /臨界區(qū) int productBUFFER_NUM; / 緩沖區(qū) int start, end; / 兩個指針 相當(dāng)于 in out 指針g_buf;typedef HANDLE Semaphore; / 信號量的Windows原型 句柄,唯一標(biāo)識Semaphore empty, full, mutex; /定義3個信號量,來實現(xiàn)互斥與同步定義PV操作,來實現(xiàn)資源的申請與釋放操作(對緩沖區(qū)的數(shù)目進(jìn)行操作)#define P(S) WaitForSingleObject(S, INFINITE) /定義c語言stdio.h庫中的P操作#define V(S) Rel
7、easeSemaphore(S, 1, NULL) / 定義c語言 stdio.h庫中的V操作2.關(guān)鍵函數(shù):CreateThread函數(shù)創(chuàng)建一個在調(diào)用進(jìn)程的地址空間中執(zhí)行的線程。此函數(shù)為API函數(shù),用于創(chuàng)建生產(chǎn)者消費(fèi)者進(jìn)程。 程序中相關(guān)代碼: hThreadi = CreateThread(NULL, 0, Consumer, &i, 0, &tid); hThreadi = CreateThread(NULL, 0, Producer, &i, 0, &tid);信號量對象(semaphore)信號量對象實現(xiàn)了Dijkstra定義中的通用信號量語義。信號量對象
8、就是資源信號量,初始值的取值在0到指定最大值之間,用于限制并發(fā)訪問的線程數(shù),也可用于進(jìn)程、線程間的同步。它的相關(guān)API包括:CreateSemaphore、OpenSemaphore和ReleaseSemaphore。本使用中主要用到了CreateSemaphore和ReleaseSemaphore。(1)CreateSemapore函數(shù)是創(chuàng)建一個有名或者無名信號量對象,在輸人參數(shù)中指定最大值和初值,返回對象句柄。格式:HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpAttributes, LONG lInitialCount, LONG lMax
9、imumCount, LPCTSTR lpName );四個參數(shù)說明:1pAttributes:安全屬性。如果是NULL就表示要使用默認(rèn)屬性。1InitialCount:Semaphore的初值。必須0,并且MaximumCount。lMaximumCount:Semaphore的最大值。這也就是在同一時間內(nèi)能夠鎖住Semaphore之線程的最多個數(shù)。1pName:Semaphore的名稱(一個字符串)。任何線程(或進(jìn)程)都可以根據(jù)這一名稱引用到這個Semaphore。這個值可以是NULL,意思是產(chǎn)生一個沒有名字的Semaphore。 返回值:如果成功就傳回一個handle,否則傳回NULL程
10、序中相關(guān)代碼:mutex = CreateSemaphore(NULL, 1, 1, TEXT("mutexOfConsumerAndProducer");empty = CreateSemaphore(NULL, BUFFER_NUM, BUFFER_NUM, TEXT("BufferSemaphone");full = CreateSemaphore(NULL, 0, BUFFER_NUM, TEXT("ProductSemaphone");等待操作Windows 2000為對象提供了兩個統(tǒng)一的等待操作函數(shù)WaitForSingl
11、eObject和WaitForMultipleObjiects,等待函數(shù)被同步對象用于實現(xiàn)各種Dijkstra定義的P操作。等待的對象包括:Change notification(改變通告);Console input(控制臺輸入);Event(事件);Job(作業(yè));Mutex(互斥對象);Process(進(jìn)程);Semaphore(信號量);Thread(線程);Waitable timer(可等待定時器)。函數(shù)決定等待條件是否被滿足。如果等待條件并沒有被滿足,調(diào)用線程進(jìn)入一個高效的等待狀態(tài),當(dāng)?shù)却凉M足條件時占用非常少的處理器時間。在運(yùn)行前,一個等待函數(shù)修改同步對象類型的狀態(tài)。修改僅發(fā)生在
12、引起函數(shù)返回的對象身上。例如,信號的計數(shù)減1。一個線程通過調(diào)用等待函數(shù)擁有對象。創(chuàng)建該對象的線程也擁有對象,而不需要調(diào)用等待函數(shù)。(1)WaitForSingleObject函數(shù)可在指定的時間內(nèi)等待指定對象為可用狀態(tài)當(dāng)下列情況之一發(fā)生時該函數(shù)返回:(1)指定對象處于信號態(tài);(2)超時。格式:DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds );參數(shù)說明: hHandle:等待對象句柄。 dwMilliseconds:指定以毫秒為單位的超時間隔。如果超時,即使對象的狀態(tài)是非信號態(tài)的并且沒有完成,函數(shù)也返回。如果它是0,函
13、數(shù)測試對象的狀態(tài)并立刻返回;如果它是INFINITE(定義為0xFFFFFFFF或-1),函數(shù)從不超時。返回值:如果函數(shù)調(diào)用成功,返回值表明引起函數(shù)返回的事件??赡苤等缦拢篧AIT_ABANDONED:指定對象是互斥對象,在線程被終止前,線程沒有釋放互斥對象?;コ鈱ο蟮乃鶎訇P(guān)系被授予調(diào)用線程,并且該互斥對象被置為非信號態(tài)。WAITOBJECT_0:指定對象的狀態(tài)被置為信號態(tài)。WAIT_TIMEOUT:超時,并且對象的狀態(tài)為非信號態(tài)。如果函數(shù)調(diào)用失敗,返回值是WAIT_FAILED。程序中相關(guān)代碼:if ( hThreadi ) WaitForSingleObject(hThreadi, 10)
14、;(2)WaitForMultipleObjects函數(shù)可在指定的時間內(nèi)等待多個對象為可用狀態(tài)。格式:DWORD WaitForMultipleObjects(DWORD nCount,CONST HANDLE *lpHandles,BOOL bWaitAll,DWORD dwMilliseconds);參數(shù)說明:nCount規(guī)定了可引起函數(shù)阻塞的一組對象的句柄數(shù)目。lpHandles指向存放一組句柄的數(shù)組。bWaitAll規(guī)定了是否函數(shù)應(yīng)該等待一組對象都發(fā)送出有信號通知(bWaitAll=TRUE),或者只是等待一個對象(bWaitAll=FLASE)。dwMilliseconds,它同在W
15、aitForSingleObiect一樣。程序中相關(guān)代碼: WaitForMultipleObjects(totalThreads, hThread, TRUE, INFINITE);生產(chǎn)者消費(fèi)者函數(shù)1、生產(chǎn)者線程DWORD WINAPI Producer(LPVOID para)int i = *(int *)para - CONSUMER_NUM; /得到當(dāng)前生產(chǎn)者的編號int ptr;/獲取緩沖區(qū)的位置int data; / 產(chǎn)品int j=0;while (j+<4)time_t tval; /定義時間函數(shù)struct tm *now;tval=time(NULL);now=lo
16、caltime(&tval);printf("生產(chǎn)者%01d:準(zhǔn)備生產(chǎn)n", i);data = rand()%8; /隨機(jī)產(chǎn)生一個0-8的隨機(jī)數(shù)P(empty);P(mutex); / 有地方,先鎖住緩沖區(qū)ptr = g_buf.end; / 記錄消費(fèi)的物品g_buf.end = (g_buf.end+1)%BUFFER_NUM; / 再移動緩沖區(qū)指針printf(" 時間:%d月: %02d日: %d:%02d:%02dn",now->tm_mon+1,now->tm_mday,now->tm_hour,now->tm
17、_min,now->tm_sec); /打印出時間printf(" 生產(chǎn)者%01d: 生產(chǎn) buf%d = %s ", i, ptr, thingdata); / 放好了完畢,釋放一個產(chǎn)品printf(" 生產(chǎn)者%01d: 生產(chǎn)完畢 n",i);/ 讓其他消費(fèi)者或生產(chǎn)者使用V(mutex);V(full);Sleep(rand()%10*1000); /等待一段時間0-9秒return 0;2、 消費(fèi)者線程 就是一個返回 DWORD(32位數(shù)據(jù))的 API 函數(shù)DWORD WINAPI Consumer(LPVOID para)/LPVOID 是一
18、個沒有類型的指針,可以任意存儲long型指針/ i表示第i個消費(fèi)者int i = *(int *)para; /利用para傳入當(dāng)前消費(fèi)者的編號2int ptr; / 待消費(fèi)的內(nèi)容的指針int j=0;while (j+<4)time_t tval; /定義時間函數(shù)struct tm *now;tval=time(NULL);now=localtime(&tval);printf("消費(fèi)者%01d:準(zhǔn)備消費(fèi)n", i); / 等待產(chǎn)品P(full); / 有產(chǎn)品,先鎖住緩沖區(qū)P(mutex);/ 申請信號量,能申請,鎖住。ptr = g_buf.start;/
19、 再移動緩沖區(qū)指針g_buf.start = (g_buf.start+1)%BUFFER_NUM;/ 讓其他消費(fèi)者或生產(chǎn)者使用printf(" 時間:%d月: %02d日: %d:%02d:%02dn",now->tm_mon+1,now->tm_mday,now->tm_hour,now->tm_min,now->tm_sec);/打印出當(dāng)前時間printf(" 消費(fèi)者%01d: 消費(fèi) buf%d",i,g_buf.start);/ 消費(fèi)完畢,并釋放一個緩沖printf(" 消費(fèi)者%01d: buf%d 消費(fèi)完
20、畢n",i,g_buf.start);V(mutex);V(empty);Sleep(rand()%10*1000); /等待一段時間0-9秒return 0;3、其它API函數(shù)(1)Sleep函數(shù)對于指定的時間間隔掛起當(dāng)前的執(zhí)行線程。格式:VOID Sleep(DWORD dwMilliseconds );dwMilliseconds:定義掛起執(zhí)行線程的時間,以毫秒(ms)為單位。取值為0時,該線程將余下的時間片交給處于就緒狀態(tài)的同一優(yōu)先級的其他線程。若沒有處于就緒狀態(tài)的同一優(yōu)先級的其他線程,則函數(shù)立即返回,該線程繼續(xù)執(zhí)行。若取值為INFINITE則造成無限延遲。返回值:該函數(shù)沒有
21、返回值。(2) localtime(&tval)函數(shù)取得當(dāng)前的本地時間和日期。time_t tval; /定義時間函數(shù)struct tm *now;tval=time(NULL);now=localtime(&tval);輸出: (時:分:秒)printf(" 時間: %d:%02d:%02dn", now->tm_hour,now->tm_min,now->tm_sec);6、程序代碼及注釋:見附錄。三、實驗結(jié)果與總結(jié)1、實驗結(jié)果2、實驗總結(jié)在此次實驗中模擬PV 操作同步機(jī)構(gòu),來解決生產(chǎn)者消費(fèi)者問題。此次實驗完成了消費(fèi)者與生產(chǎn)者這兩個進(jìn)程
22、之間的同步協(xié)調(diào)問題。 值得注意的是解決進(jìn)程同步需要做哪些工作,如何利用信號量機(jī)制來解決進(jìn)程同步問題等等,這些問題其實我們在學(xué)習(xí)理論知識時都是很少思考的,因為感觸不深,所以學(xué)了一遍就過去了,但是在自己做實驗時才會發(fā)現(xiàn)哪些地方是我們需要考慮的,哪些地方是需要注意的,實驗給了我們實踐的機(jī)會,給了我們理論結(jié)合實際的機(jī) 會,從實驗中可以學(xué)到很多東西,不僅僅是書本上的東西這么簡單,更重要的是對待事情嚴(yán)謹(jǐn)?shù)膽B(tài)度,對待任何事情都要一絲不茍,細(xì)節(jié)決定成敗! 但發(fā)現(xiàn)代碼做出來后,對很多理論知識還是不知道。如老師驗收時問,什么是臨界區(qū),一開始我把臨界區(qū)和臨界資源等同理解了,后來才明白,臨界區(qū)是一段代碼塊,只PV操作
23、間的那段代碼。所有覺得自己看書還是沒真正的看好書。看得很馬虎。 總之,通過本次課程設(shè)計,我弄明白了進(jìn)程間的通信機(jī)制,熟悉臨界資源、信號量及PV操作的定義與物理意義。了解進(jìn)程通信的方法。掌握進(jìn)程互斥與進(jìn)程同步的相關(guān)知識,掌握用信號量機(jī)制解決進(jìn)程間的同步和互斥問題,深刻理解生產(chǎn)者消費(fèi)者進(jìn)程同步問題。同時,深刻的理會到,學(xué)習(xí)的確應(yīng)該手腦并用,學(xué)做合一,應(yīng)該認(rèn)真仔細(xì)的去看書 在此感謝我們的老師,龔茗茗老師,帶病陪著我們做完課程設(shè)計,并細(xì)心為我們答疑解惑。再次感謝!參考文獻(xiàn)操作系統(tǒng)教程(第5版) 費(fèi)翔林 駱 斌 編制 高等教育出版社 C+面向?qū)ο蟪绦蛟O(shè)計教程(第3版) 陳維興 林小茶 編制 清華大學(xué)出版
24、社 網(wǎng)絡(luò)查閱資料(百科、博客) 附錄主要代碼:#include <windows.h>#include <stdio.h>#include <stdlib.h>#include <time.h>typedef HANDLE Semaphore; / 信號量的Windows原型 句柄,唯一標(biāo)識#define P(S) WaitForSingleObject(S, INFINITE) / 定義c語言 stdio.h庫中的P操作#define V(S) ReleaseSemaphore(S, 1, NULL) / 定義c語言 stdio.h庫中的V操作
25、#define rate 1000#define CONSUMER_NUM 2 /* 消費(fèi)者個數(shù) */#define PRODUCER_NUM 2 /* 生產(chǎn)者個數(shù) */#define BUFFER_NUM 5 /* 緩沖區(qū)個數(shù) */char *thing8 = "11", "12", "13", "14", "21", "22", "23", "24" /生產(chǎn)和消費(fèi)的產(chǎn)品名稱struct Bufferint productBUFFER
26、_NUM; / 緩沖區(qū)int start, end; / 兩個指針 相當(dāng)于 in out 指針g_buf;Semaphore empty, full, mutex; /分別相當(dāng)于empty, full, mutex互斥信號量三個信號量/ 消費(fèi)者線程 就是一個返回 DWORD(32位數(shù)據(jù))的 API 函數(shù)DWORD WINAPI Consumer(LPVOID para)/LPVOID 是一個沒有類型的指針,可以任意存儲long型指針/ i表示第i個消費(fèi)者int i = *(int *)para; /利用para傳入當(dāng)前消費(fèi)者的編號2int ptr; / 待消費(fèi)的內(nèi)容的指針int j=0;whi
27、le (j+<4)time_t tval;struct tm *now;tval=time(NULL);now=localtime(&tval);printf("消費(fèi)者%01d:準(zhǔn)備消費(fèi)n", i); / 等待產(chǎn)品P(full); / 有產(chǎn)品,先鎖住緩沖區(qū)P(mutex);/ 申請信號量,能申請,鎖住。ptr = g_buf.start;/ 再移動緩沖區(qū)指針g_buf.start = (g_buf.start+1)%BUFFER_NUM;/ 讓其他消費(fèi)者或生產(chǎn)者使用printf(" 時間:%d月: %02d日: %d:%02d:%02dn"
28、,now->tm_mon+1,now->tm_mday,now->tm_hour,now->tm_min,now->tm_sec);printf(" 消費(fèi)者%01d: 消費(fèi) buf%d",i,g_buf.start);/ 消費(fèi)完畢,并釋放一個緩沖printf(" 消費(fèi)者%01d: buf%d 消費(fèi)完畢n",i,g_buf.start);V(mutex);V(empty);Sleep(rand()%10*1000);return 0;/ 生產(chǎn)者線程DWORD WINAPI Producer(LPVOID para)int i
29、= *(int *)para - CONSUMER_NUM; int ptr;int data; / 產(chǎn)品int j=0;while (j+<4)time_t tval;struct tm *now;tval=time(NULL);now=localtime(&tval);printf("生產(chǎn)者%01d:準(zhǔn)備生產(chǎn)n", i);data = rand()%8;P(empty);/ 有地方,先鎖住緩沖區(qū)P(mutex);/ 記錄消費(fèi)的物品ptr = g_buf.end;/ 再移動緩沖區(qū)指針g_buf.end = (g_buf.end+1)%BUFFER_NUM;p
30、rintf(" 時間:%d月: %02d日: %d:%02d:%02dn",now->tm_mon+1,now->tm_mday,now->tm_hour,now->tm_min,now->tm_sec);printf(" 生產(chǎn)者%01d: 生產(chǎn) buf%d = %s ", i, ptr, thingdata); / 放好了完畢,釋放一個產(chǎn)品printf(" 生產(chǎn)者%01d: 生產(chǎn)完畢 n",i);/ 讓其他消費(fèi)者或生產(chǎn)者使用V(mutex);V(full);Sleep(rand()%10*1000);return 0;int main(int argc, char *argv)/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 交通行業(yè)緊急事故救援手冊
- 舞蹈編導(dǎo)說課
- 光掃描數(shù)字化儀相關(guān)項目投資計劃書范本
- 砼空心砌塊(承重型)相關(guān)行業(yè)投資方案范本
- 快遞行業(yè)快遞業(yè)務(wù)量預(yù)測試題
- 史記經(jīng)典故事讀后感
- 云計算行業(yè)云服務(wù)與大數(shù)據(jù)分析方案
- 智慧醫(yī)療項目合作框架協(xié)議
- 電力行業(yè)分布式能源開發(fā)協(xié)議
- 工程材料采購合同協(xié)議
- GB/T 20972.2-2025石油天然氣工業(yè)油氣開采中用于含硫化氫環(huán)境的材料第2部分:抗開裂碳鋼、低合金鋼和鑄鐵
- 美團(tuán)供應(yīng)鏈管理案例分析
- 2025年內(nèi)蒙古烏蘭察布盟單招職業(yè)適應(yīng)性測試題庫新版
- 《鈉離子電池產(chǎn)業(yè)發(fā)展白皮書》
- 深圳市一模+Z20名校聯(lián)盟+浙江名校協(xié)作體高三語文2月聯(lián)考作文題目解析及相關(guān)范文
- 2025中考作文預(yù)測
- 油氣田開發(fā)專業(yè)危害因素辨識與風(fēng)險防控
- 2025年浙江省衢州市常山糧食收儲有限責(zé)任公司招聘筆試參考題庫附帶答案詳解
- 假肢安裝合同范本
- 《重大基礎(chǔ)設(shè)施項目涉及風(fēng)景名勝區(qū)選址論證報告編制技術(shù)規(guī)范》編制說明
- 2025年中國中煤能源股份有限公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論