版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
數(shù)學(xué)與信息技術(shù)學(xué)院PAGEPAGE1 南京曉莊學(xué)院 《操作系統(tǒng)》實(shí)驗(yàn)報(bào)告指導(dǎo)老師:專業(yè)班級(jí):學(xué)號(hào): 姓名: 完成日期:數(shù)學(xué)與信息技術(shù)學(xué)院一、實(shí)驗(yàn)概述1.實(shí)驗(yàn)?zāi)康纳钊肓私庹莆者M(jìn)程的同步、互斥機(jī)制,認(rèn)識(shí)理解其調(diào)度過程,并用于解決實(shí)際生產(chǎn)者/消費(fèi)者問題。使用高級(jí)編程語言現(xiàn)“生產(chǎn)者——消費(fèi)者”進(jìn)程同步問題。2.實(shí)驗(yàn)?zāi)繕?biāo)(1)對(duì)課本知識(shí)加以鞏固,在實(shí)踐中提高動(dòng)手能力;(2)完整的完成此次實(shí)驗(yàn),并有所創(chuàng)新與突破;(3)獨(dú)立思考,充分利用網(wǎng)絡(luò)資源與圖書資源;(4)取得一個(gè)被老師認(rèn)可的高分評(píng)價(jià);二、實(shí)驗(yàn)工具1.操作系統(tǒng):windows2003serverenterprise2.開發(fā)環(huán)境:VisualStudio2010三、實(shí)驗(yàn)過程1、實(shí)驗(yàn)具體題目,分析題目:本實(shí)驗(yàn)要求利用PV操作實(shí)現(xiàn)解決生產(chǎn)者——消費(fèi)者問題中的同步問題。此問題描述的是一群生產(chǎn)者進(jìn)程在生產(chǎn)產(chǎn)品并將這些產(chǎn)品提供給消費(fèi)者進(jìn)程去消費(fèi),在兩者之間設(shè)置了一個(gè)具有n個(gè)緩沖區(qū)的緩沖池,生產(chǎn)者進(jìn)程將它所生產(chǎn)的產(chǎn)品放入一個(gè)緩沖區(qū),消費(fèi)者進(jìn)程可從緩沖區(qū)中取走產(chǎn)品去消費(fèi),但它們之間必須保持同步,即不允許消費(fèi)者進(jìn)程到一個(gè)空緩沖區(qū)去取產(chǎn)品,也不允許生產(chǎn)者進(jìn)程向一個(gè)已裝滿且尚未取出的緩沖區(qū)中投放產(chǎn)品,并且生產(chǎn)者消費(fèi)者互斥使用緩沖區(qū)。算法流程:算法實(shí)現(xiàn)主要用到生產(chǎn)者函數(shù)RP-ProceducerThread(void*p)來實(shí)現(xiàn)緩沖區(qū)產(chǎn)品數(shù)量的增加,用RP-ConsumerThread(void*p)來實(shí)現(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算法的實(shí)現(xiàn)是利用buffer_empty和buffer_full來進(jìn)行控制,buffer_empty的值可以看做資源量,只有空的數(shù)值大于0才可以進(jìn)行生產(chǎn),buffer_full的數(shù)值與buffer_empty的值有對(duì)應(yīng)的關(guān)系,利用buffer_full來控制消費(fèi)的進(jìn)行。最后,在緩沖區(qū)操作臨界資源PC_Buffer來說利用EnterCriticalSection(&PC_Buffer);//等待共享資源LeaveCriticalSection(&PC_Buffer);//釋放共享資源來進(jìn)行緩沖區(qū)操作的控制??傊?dāng)程序讀入測試文件中的數(shù)據(jù)時(shí),便根據(jù)讀入的字符時(shí)C還是P創(chuàng)造相應(yīng)的進(jìn)程,在分配EMPTY或者FULL資源,然后等待共享資源PC_Buffer,得到后便進(jìn)行操作。最后讀入所有的數(shù)據(jù),完成所有進(jìn)程的操作。需要解決的問題:利用生產(chǎn)者進(jìn)程進(jìn)行生產(chǎn),同時(shí)消費(fèi)者進(jìn)程也能進(jìn)行消費(fèi),但是必須滿足同步的條件才可以允許,否則將提示緩沖區(qū)滿無法進(jìn)行生產(chǎn)或者緩沖區(qū)空無法進(jìn)行消費(fèi)的錯(cuò)誤,故程序應(yīng)該具有判斷的功能。若結(jié)束當(dāng)前的生產(chǎn)者——消費(fèi)者進(jìn)程,將會(huì)提示此次進(jìn)程中生產(chǎn)消費(fèi)者分別生產(chǎn)了和消費(fèi)的產(chǎn)品數(shù)目,并統(tǒng)計(jì)緩沖區(qū)中剩余的產(chǎn)品數(shù)目,最后才結(jié)束。5、關(guān)鍵代碼分析:1、做出如下定義CRITICAL_SECTIONPC_Buffer;//臨界區(qū)HANDLEh_semaphore_empty,h_semaphore_full;//信號(hào)量對(duì)象structBuffer{charbuf[BUFFER_LEN];}Buf[MAX_THREAD_NUM];intin=0;//生產(chǎn)者生產(chǎn)指針intout=0;//消費(fèi)者消費(fèi)指針SYSTEMTIMEtimeSys;CRITICAL_SECTIONPC_Buffer;//臨界區(qū)HANDLEh_semaphore_empty,h_semaphore_full;//信號(hào)量對(duì)象structThreadInfo{intserial;//線程序號(hào)charentity;//線程類別(P-生產(chǎn)者線程,C-消費(fèi)者線程)doubledelay;//生產(chǎn)產(chǎn)品/延續(xù)時(shí)間doublepersist;//線程把產(chǎn)品加入到緩沖區(qū)/持續(xù)時(shí)間};2①CreateThread函數(shù)創(chuàng)建一個(gè)在調(diào)用進(jìn)程的地址空間中執(zhí)行的線程。此函數(shù)為API函數(shù),用于創(chuàng)建生產(chǎn)者消費(fèi)者進(jìn)程。②信號(hào)量對(duì)象(semaphore)信號(hào)量對(duì)象實(shí)現(xiàn)了Dijkstra定義中的通用信號(hào)量語義。信號(hào)量對(duì)象就是資源信號(hào)量,初始值的取值在0到指定最大值之間,用于限制并發(fā)訪問的線程數(shù),也可用于進(jìn)程、線程間的同步。它的相關(guān)API包括:CreateSemaphore、OpenSemaphore和ReleaseSemaphore。(1)CreateSemapore函數(shù)是創(chuàng)建一個(gè)有名或者無名信號(hào)量對(duì)象,在輸人參數(shù)中指定最大值和初值,返回對(duì)象句柄。格式:HANDLECreateSemaphore(LPSECURITY_ATTRIBUTESlpAttributes,LONGlInitialCount,LONGlMaximumCount,LPCTSTRlpName);1pAttributes:安全屬性。如果是NULL就表示要使用默認(rèn)屬性。1InitialCount:Semaphore的初值。必須≥0,并且≤MaximumCount。lMaximumCount:Semaphore的最大值。這也就是在同一時(shí)間內(nèi)能夠鎖住Semaphore之線程的最多個(gè)數(shù)。1pName:Semaphore的名稱(一個(gè)字符串)。任何線程(或進(jìn)程)都可以根據(jù)這一名稱引用到這個(gè)Semaphore。這個(gè)值可以是NULL,意思是產(chǎn)生一個(gè)沒有名字的Semaphore。返回值:如果成功就傳回一個(gè)handle,否則傳回NULL③等待操作Windows2000為對(duì)象提供了兩個(gè)統(tǒng)一的等待操作函數(shù)WaitForSingleObject和WaitForMultipleObjiects,等待函數(shù)被同步對(duì)象用于實(shí)現(xiàn)各種Dijkstra定義的P操作。等待的對(duì)象包括:Changenotification(改變通告);Consoleinput(控制臺(tái)輸入);Event(事件);Job(作業(yè));Mutex(互斥對(duì)象);Process(進(jìn)程);Semaphore(信號(hào)量);Thread(線程);Waitabletimer(可等待定時(shí)器)。函數(shù)決定等待條件是否被滿足。如果等待條件并沒有被滿足,調(diào)用線程進(jìn)入一個(gè)高效的等待狀態(tài),當(dāng)?shù)却凉M足條件時(shí)占用非常少的處理器時(shí)間。在運(yùn)行前,一個(gè)等待函數(shù)修改同步對(duì)象類型的狀態(tài)。修改僅發(fā)生在引起函數(shù)返回的對(duì)象身上。例如,信號(hào)的計(jì)數(shù)減1。一個(gè)線程通過調(diào)用等待函數(shù)擁有對(duì)象。創(chuàng)建該對(duì)象的線程也擁有對(duì)象,而不需要調(diào)用等待函數(shù)。(1)WaitForSingleObject函數(shù)可在指定的時(shí)間內(nèi)等待指定對(duì)象為可用狀態(tài)當(dāng)下列情況之一發(fā)生時(shí)該函數(shù)返回:(1)指定對(duì)象處于信號(hào)態(tài);(2)超時(shí)。格式:DWORDWaitForSingleObject(HANDLEhHandle,DWORDdwMilliseconds);hHandle:等待對(duì)象句柄。dwMilliseconds:指定以毫秒為單位的超時(shí)間隔。如果超時(shí),即使對(duì)象的狀態(tài)是非信號(hào)態(tài)的并且沒有完成,函數(shù)也返回。如果它是0,函數(shù)測試對(duì)象的狀態(tài)并立刻返回;如果它是INFINITE(定義為0xFFFFFFFF或-1),函數(shù)從不超時(shí)。返回值:如果函數(shù)調(diào)用成功,返回值表明引起函數(shù)返回的事件??赡苤等缦拢篧AIT_ABANDONED:指定對(duì)象是互斥對(duì)象,在線程被終止前,線程沒有釋放互斥對(duì)象?;コ鈱?duì)象的所屬關(guān)系被授予調(diào)用線程,并且該互斥對(duì)象被置為非信號(hào)態(tài)。WAITOBJECT_0:指定對(duì)象的狀態(tài)被置為信號(hào)態(tài)。WAIT_TIMEOUT:超時(shí),并且對(duì)象的狀態(tài)為非信號(hào)態(tài)。如果函數(shù)調(diào)用失敗,返回值是WAIT_FAILED。(2)WaitForMultipleObjects函數(shù)可在指定的時(shí)間內(nèi)等待多個(gè)對(duì)象為可用狀態(tài)。格式:DWORDWaitForMultipleObjects(DWORDnCount,CONSTHANDLE*lpHandles,BOOLbWaitAll,DWORDdwMilliseconds);nCount規(guī)定了可引起函數(shù)阻塞的一組對(duì)象的句柄數(shù)目。lpHandles指向存放一組句柄的數(shù)組。bWaitAll規(guī)定了是否函數(shù)應(yīng)該等待一組對(duì)象都發(fā)送出有信號(hào)通知(bWaitAll=TRUE),或者只是等待一個(gè)對(duì)象(bWaitAll=FLASE)。dwMilliseconds,它同在WaitForSingleObiect一樣。④臨界區(qū)對(duì)象臨界區(qū)對(duì)象只能用于在同一個(gè)進(jìn)程內(nèi)使用的臨界區(qū),同一個(gè)進(jìn)程內(nèi)各線程對(duì)它的訪問是互斥進(jìn)行的,臨界區(qū)對(duì)象的運(yùn)行速度比互斥對(duì)象快。把變量說明為CRITICAL_SECTION類型,就可作臨界區(qū)使用。相關(guān)的API包括InitializeCriticalSection、EnterCriticalSection、TryEnterCriticalSection、LeaveCriticalSection和DeleteCriticalSection。(1)InitializeCriticalSection函數(shù)初始化臨界區(qū)對(duì)象。格式:VOIDInitializeCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);lpCriticalSection:指向臨界區(qū)對(duì)象的指針。(2)EnterCriticalSection函數(shù)是等待指定臨界區(qū)對(duì)象的所有權(quán)。當(dāng)調(diào)用線程被賦予所有權(quán)時(shí),該函數(shù)返回。格式:VOIDEnterCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);lpCriticalSection:指向臨界區(qū)對(duì)象的指針。(3)LeaveCriticalSection函數(shù)釋放指定臨界區(qū)對(duì)象的所有權(quán)格式:VOIDLeaveCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);1pCriticalSection:指向臨界區(qū)對(duì)象的指針。(4)DeleteCriticalSection釋放與臨界區(qū)對(duì)象相關(guān)的所有系統(tǒng)資源。(5)臨界區(qū)對(duì)象的應(yīng)用例進(jìn)程通過聲明CRITICAL_SECTION類型的變量來完成分配臨界區(qū)對(duì)象使用的存儲(chǔ)空間,使用InitializeCriticalSection來初始化該臨界區(qū)對(duì)象。線程在進(jìn)入臨界區(qū)之前使用EnterCriticalSection等待占用臨界區(qū)的使用權(quán),線程在退出臨界區(qū)之后馬上使用LeaveCriticalSection釋放臨界區(qū)的使用權(quán)。利用臨界區(qū)對(duì)象實(shí)現(xiàn)一個(gè)進(jìn)程的各線程互斥的程序如下:……CRITICAL_SECTIONPC_Buffer;structThreadInfo{……};voidRP_ProceducerThread(void*p){……EnterCriticalSection(&PC_Buffer);//等待共享資源……(臨界區(qū))//生產(chǎn)者把產(chǎn)品加入到緩沖區(qū)LeaveCriticalSection(&PC_Buffer);//釋放共享資源……}intmain(intargc,char*argv[]){HANDLEh_Thread;DWORDthread_ID;ThreadInfothread_info[MAX_THREAD_NUM];InitializeCriticalSection(&PC_Buffer);……h(huán)_Thread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(RP_ProceducerThread),&thread_info[i],0,&thread_ID);……}⑤生產(chǎn)者消費(fèi)者函數(shù)voidRP_ProceducerThread(void*p){DWORDm_delay;//生產(chǎn)產(chǎn)品延續(xù)時(shí)間DWORDm_persist;//把產(chǎn)品加入到緩沖區(qū)持續(xù)時(shí)間intm_serial;//線程序號(hào)DWORDwait_for_semaphore_empty;//等待資源信號(hào)量所有權(quán)l(xiāng)ongcount;//從參數(shù)中獲得信息m_serial=((ThreadInfo*)(p))->serial;m_delay=(DWORD)(((ThreadInfo*)(p))->delay*INTE_PER_SEC);m_persist=(DWORD)(((ThreadInfo*)(p))->persist*INTE_PER_SEC);Sleep(m_delay);//生產(chǎn)產(chǎn)品printtime("Producer","requests",m_serial);wait_for_semaphore_empty=WaitForSingleObject(h_semaphore_empty,-1);//等待資源信號(hào)量emptyEnterCriticalSection(&PC_Buffer);//等待共享資源printtime("Producer","begins",m_serial);Sleep(m_persist);//生產(chǎn)者把產(chǎn)品加入到緩沖區(qū)printtime("Producer","finishs",m_serial);LeaveCriticalSection(&PC_Buffer);//釋放共享資源ReleaseSemaphore(h_semaphore_full,1,&count);//釋放資源信號(hào)量full}voidRP_ConsumerThread(void*p){DWORDm_delay;//消費(fèi)產(chǎn)品持續(xù)時(shí)間DWORDm_persist;//從緩沖區(qū)取出產(chǎn)品持續(xù)時(shí)間intm_serial;//消費(fèi)線程序號(hào)DWORDwait_for_semaphore_full;//等待資源信號(hào)量longcount;//從參數(shù)中獲得信息m_serial=((ThreadInfo*)(p))->serial;m_delay=(DWORD)(((ThreadInfo*)(p))->delay*INTE_PER_SEC);m_persist=(DWORD)(((ThreadInfo*)(p))->persist*INTE_PER_SEC);Sleep(m_delay);printtime("Consumer","requests",m_serial);wait_for_semaphore_full=WaitForSingleObject(h_semaphore_full,-1);//等待資源信號(hào)量fullEnterCriticalSection(&PC_Buffer);//等待共享資源printtime("Consumer","begins",m_serial);Sleep(m_persist);//消費(fèi)者從緩沖區(qū)取出產(chǎn)品printtime("Consumer","finishs",m_serial);LeaveCriticalSection(&PC_Buffer);//釋放共享資源ReleaseSemaphore(h_semaphore_empty,1,&count);//釋放資源信號(hào)量emptySleep(m_delay);//消費(fèi)者消費(fèi)產(chǎn)品}3.其它API函數(shù)(1)Sleep函數(shù)對(duì)于指定的時(shí)間間隔掛起當(dāng)前的執(zhí)行線程。格式:VOIDSleep(DWORDdwMilliseconds);dwMilliseconds:定義掛起執(zhí)行線程的時(shí)間,以毫秒(ms)為單位。取值為0時(shí),該線程將余下的時(shí)間片交給處于就緒狀態(tài)的同一優(yōu)先級(jí)的其他線程。若沒有處于就緒狀態(tài)的同一優(yōu)先級(jí)的其他線程,則函數(shù)立即返回,該線程繼續(xù)執(zhí)行。若取值為INFINITE則造成無限延遲。返回值:該函數(shù)沒有返回值。(2)GetLocalTime函數(shù)取得當(dāng)前的本地時(shí)間和日期。格式:BOOLGetLocalTime(lpst);lpst:指向一個(gè)SYSTEMTIME結(jié)構(gòu),該結(jié)構(gòu)存放當(dāng)前的本地時(shí)間和日期。typedefstruct_SYSTEMTIME{WORDwYear;WORDwMonth;WORDwDayOfWeek;WORDwDay;WORDwHour;WORDwMinute;WORDwSecond;WORDwMilliseconds;}SYSTEMTIME;四、實(shí)驗(yàn)心得1、實(shí)驗(yàn)結(jié)果。截圖。2、錯(cuò)誤與分析。該程序總體上來看比較簡單,在調(diào)試過程中只要注意一些小問題,則不會(huì)出現(xiàn)問題了,除了少許語法錯(cuò)誤外,控制好程序的走向,則邏輯錯(cuò)誤亦可避免;程序的總體思路很清晰,最主要的就是要實(shí)現(xiàn)兩個(gè)條件判斷,即緩沖區(qū)滿的時(shí)候不允許生產(chǎn)者進(jìn)行生產(chǎn),若緩沖區(qū)空的話,則不進(jìn)行消費(fèi)者進(jìn)行消費(fèi);在生產(chǎn)操作和消費(fèi)操作之間進(jìn)行相應(yīng)的判斷,正好符合PV信號(hào)量,先做P操作,若滿足,則執(zhí)行此進(jìn)程,若不滿足,則阻塞此進(jìn)程,并做相應(yīng)的V操作,即喚醒其對(duì)應(yīng)的進(jìn)程,從而很好的解決了生產(chǎn)者——消費(fèi)者問題3、心得體會(huì);在此次實(shí)驗(yàn)中我們模擬PV操作同步機(jī)構(gòu),來解決生產(chǎn)者——消費(fèi)者問題。此次實(shí)驗(yàn)完成了消費(fèi)者與生產(chǎn)者這兩個(gè)進(jìn)程之間的同步協(xié)調(diào)問題。值得注意的是解決進(jìn)程同步需要做哪些工作,如何利用信號(hào)量機(jī)制來解決進(jìn)程同步問題等等,這些問題其實(shí)我們?cè)趯W(xué)習(xí)理論知識(shí)時(shí)都是很少思考的,因?yàn)楦杏|不深,所以學(xué)了一遍就過去了,但是在自己做實(shí)驗(yàn)時(shí)才會(huì)發(fā)現(xiàn)哪些地方是我們需要考慮的,哪些地方是需要注意的,實(shí)驗(yàn)給了我們實(shí)踐的機(jī)會(huì),給了我們理論結(jié)合實(shí)際的機(jī)會(huì),從實(shí)驗(yàn)中可以學(xué)到很多東西,不僅僅是書本上的東西這么簡單,更重要的是對(duì)待事情嚴(yán)謹(jǐn)?shù)膽B(tài)度,對(duì)待任何事情都要一絲不茍,細(xì)節(jié)決定成??!附錄:·主要代碼//publick.cpp:定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。//#include"stdafx.h"#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<windows.h>#defineNULL0structspcb{charname;charstate;charwhy;intdd;};typedefstructspcbpcb;pcbproducter,consumer,*process,*process1;ints1,s2,i,j,in,out,pc,m;chararray[10];charc,x;intpa[6],sa[6];intp(ints)/*p操作原語*/{ s=s-1; if(s<0) { process->state='B';/*B表示阻塞*/ process->why='s'; } else { process->state='W';/*W表示就緒*/ } return(s);}intv(ints)/*v操作原語*/{ s=s+1; if(s<=0) { process1->state='W'; } process->state='W'; return(s);}charRanChar(){ chararr[10]={'a','b','c','d','e','f','g','h','i','j'}; returnarr[abs(rand()%10)];}voidput(){// printf("\npleaseproductanychar!");// scanf("\n%c",&c); Sleep(1000); array[in]=RanChar(); in=(in+1)%10; printf("productacharis%c!\n",array[in-1]); intk=0;for(intm=0;m<10;m++) { if(array[m]!=''){ printf("%c",array[m]); k=k+1; } } printf("緩沖池中有%d個(gè)產(chǎn)品\n",k);}voidget(){ Sleep(1000); x=array[out];printf("\n%cgetacharfronbuffer",x); printf("\n");array[out]=''; out=(out+1)%10;intk=0;for(m=0;m<10;m++) { if(array[m]!=''){ printf("%c",array[m]); k=k+1; } } printf("緩沖池中有%d個(gè)產(chǎn)品\n",k);}voidgotol(){ pc=0;}voidnop(){;}voiddisp()/*建立進(jìn)程顯示函數(shù),用于顯示當(dāng)前進(jìn)程*/{ printf("\nname\tstate\twhy\tdd\n"); printf("|%c\t",process->name); printf("|%c\t",process->state); printf("|%c\t",process->why); printf("|%d\t",process->dd); printf("\n");}voidinit()/*初始化程序*/{ s1=10;/*s1表示空緩沖區(qū)的數(shù)量*/ s2=0;/*s2表示滿緩沖區(qū)的數(shù)量*/ ='p';/*對(duì)生產(chǎn)者進(jìn)程初始化*/ producter.state='W'; producter.why=''; producter.dd=0; ='c';/*對(duì)消費(fèi)者進(jìn)程初始化*/ consumer.state='W'; consumer.why=''; consumer.dd=0; for(intk=0;k<10;k++) { array[k]=''; }}voidbornpa()/*將生產(chǎn)者程序裝入pa[]中*/{ for(i=0;i<=3;i++) { pa[i]=i; }}voidbornsa()/*將消費(fèi)者程序裝入sa[]中*/{ for(i=0;i<=3;i++) { sa[i]=i; }}voidd
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年中國雙層澡巾市場調(diào)查研究報(bào)告
- 智能垃圾箱課程設(shè)計(jì)
- 2025至2030年中國通道擴(kuò)展器行業(yè)投資前景及策略咨詢研究報(bào)告
- 熱電廠電氣課程設(shè)計(jì)
- 2025至2030年中國噻螨酮行業(yè)投資前景及策略咨詢研究報(bào)告
- 幼兒的規(guī)劃課程設(shè)計(jì)
- 2024年中國防靜電四眼革鞋市場調(diào)查研究報(bào)告
- 2024年中國造紙助劑市場調(diào)查研究報(bào)告
- 打造銷售渠道的課程設(shè)計(jì)
- 移動(dòng)通信技術(shù)課程設(shè)計(jì)
- 廣東省深圳市寶安區(qū)2023-2024學(xué)年高一年級(jí)上冊(cè)調(diào)研測試物理試卷
- 冰雪旅游安全知識(shí)假期旅行安全攻略
- 城市軌道交通售檢票系統(tǒng) 課件 項(xiàng)目四 自動(dòng)售票機(jī)
- 人口老齡化社會(huì)的挑戰(zhàn)與機(jī)遇
- 虛實(shí)結(jié)合(上課改)課件
- 2024年山東能源集團(tuán)魯西礦業(yè)有限公司招聘筆試參考題庫含答案解析
- 社區(qū)宣傳工作方案及措施
- 南昌市南昌縣2023-2024學(xué)年八年級(jí)上學(xué)期期末數(shù)學(xué)測試卷(含答案)
- 安全教育主題班會(huì):防恐怖、防極端、防不法侵害
- 乳業(yè)市場督導(dǎo)總結(jié)匯報(bào)
- 有機(jī)肥料及微生物肥料生產(chǎn)技術(shù)的創(chuàng)新與發(fā)展
評(píng)論
0/150
提交評(píng)論