




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 燕山大學(xué)課程設(shè)計(jì)說明書課程設(shè)計(jì)名稱:操作系統(tǒng) 題目:多道程序緩沖區(qū)協(xié)調(diào)操作 (模擬生產(chǎn)者消費(fèi)者問題) 課題負(fù)責(zé)人: 學(xué)院: 信息科學(xué)與工程學(xué)院 班級(jí): 姓名: 學(xué)號(hào): 課題開發(fā)日期:2014年1月13日 自評(píng)成績: A 目錄1 概述-31.1 目的-31.2 主要完成的任務(wù)-31.3 使用的開發(fā)工具、開發(fā)語言-31.4 本軟件解決的主要問題 -42 設(shè)計(jì)的基本理念、概念和原理-42.1 設(shè)計(jì)的基本理念-42.2 基本概念-42.3 基本原理-53 總體設(shè)計(jì)-53.1基本的技術(shù)路線:面向?qū)ο?53.2模塊關(guān)系及總體流程-54 詳細(xì)設(shè)計(jì)-74.1 變量設(shè)計(jì)-74.2 線程的設(shè)計(jì)-74.3 but
2、ton按鈕的設(shè)計(jì)-85編碼設(shè)計(jì)-95.1開發(fā)環(huán)境-95.2注意事項(xiàng)-95.3主要代碼設(shè)計(jì)-9PUTTER線程的設(shè)計(jì)-9MOVER1線程的設(shè)計(jì)-10GETTER1線程的設(shè)計(jì)-11“開始”按鈕的設(shè)計(jì)-12“結(jié)束”按鈕的設(shè)計(jì)-145.4解決的主要難題-166測(cè)試出現(xiàn)的問題及其解決方案-167工程總結(jié)-168參考文獻(xiàn)-16多道程序緩沖區(qū)協(xié)調(diào)操作演示程序設(shè)計(jì)說明書1 概述1.1 目的計(jì)算機(jī)操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)中最不可缺少的,最常用的軟件,也是核心的,最接近于計(jì)算機(jī)硬件的軟件。其特點(diǎn)是內(nèi)容繁多,概念抽象,因此造成理解困難,掌握不易。本軟件的主要目的是通過直觀的演示,使學(xué)生能夠感性的明白掌握多道程序及其進(jìn)程
3、同步和互斥的程序設(shè)計(jì)的基本方法。1.2 主要完成的任務(wù)(1) 可隨機(jī)產(chǎn)生字符數(shù)據(jù),由生產(chǎn)者的put操作不斷將生產(chǎn)的字符數(shù)據(jù)放入容器1(Buffer1)中。(2) 通過搬運(yùn)者的Move1操作要不斷地將容器1(Buffer1)的數(shù)據(jù)取到容器2(Buffer2)中。(3) 通過搬運(yùn)者的Move2操作要不斷地將容器1(Buffer1)的數(shù)據(jù)取到容器3(Buffer3)中。(4) 通過消費(fèi)者1的GET操作不斷的從容器2(buffer2)中取出數(shù)據(jù)(5) 通過消費(fèi)者2的GET操作不斷地從容器3(Buffer3)中取出數(shù)據(jù)。(6) 生產(chǎn)者,搬運(yùn)者,消費(fèi)者的數(shù)目,buffer容量可自己設(shè)定,但數(shù)目不宜過多;默
4、認(rèn)為生產(chǎn)者5,消費(fèi)者1為5,消費(fèi)者2為5,Move1為2,Move2為2,buffer1容量為10,buffer2容量為10,buffer3容量為10。(7) PUT、 Move1、Move2、 GET1,GET2每次操作一個(gè)數(shù)據(jù),在操作的過程中數(shù)據(jù)不丟失,每個(gè)Buffer每次只能接受一個(gè)PUT或一個(gè)Move或一個(gè)Get,多個(gè)操作不能同時(shí)操作同一BUFFER。(8) 能夠?qū)崟r(shí)顯示Buffer的操作過程,以及每個(gè)Buffer的當(dāng)前放入的數(shù)據(jù),每個(gè)buffer中的數(shù)據(jù)的個(gè)數(shù)。(9) 能夠?qū)ιa(chǎn)者,搬運(yùn)者,消費(fèi)者的速度進(jìn)行自由控制。(10) 當(dāng)程序運(yùn)行開始后,計(jì)時(shí)器就開始計(jì)時(shí),直到運(yùn)行結(jié)束,顯示運(yùn)行
5、的總時(shí)間。(11) 運(yùn)行結(jié)束后,能夠匯總總運(yùn)行時(shí)時(shí)間、已生產(chǎn)產(chǎn)品數(shù)、消費(fèi)者1已消費(fèi)產(chǎn)品數(shù)、消費(fèi)者2已消費(fèi)的產(chǎn)品數(shù)、總消費(fèi)的產(chǎn)品數(shù)。1.3使用的開發(fā)工具、開發(fā)語言開發(fā)工具:VS2010開發(fā)語言:C+C+是面向?qū)ο蟮囊环N編程語言,窗口程序設(shè)計(jì)中MFC已經(jīng)將windows最底層的API函數(shù)以類的形式封裝好,使用方便。 其特點(diǎn)有:1.面向?qū)ο螅?2.平臺(tái)無關(guān)性; 3.安全性; 4.健壯性;1.4本軟件解決的主要問題對(duì)Buffer操作的多線程同步問題,利用操作系統(tǒng)的P、V原語操作和C+語言的Thread線程對(duì)put、move、get等多線程進(jìn)行協(xié)調(diào)處理,實(shí)現(xiàn)了多線程并發(fā)執(zhí)行的原理。用程序演示了操作系統(tǒng)中
6、經(jīng)典的生產(chǎn)者和消費(fèi)者問題。2 設(shè)計(jì)的基本理念、概念和原理2.1 設(shè)計(jì)的基本理念使用VS2010創(chuàng)建了一個(gè)基本對(duì)話框類,并在對(duì)話框中添加了基本需要的所有控件:(1) buffer1,buffer2,buffer3三個(gè)LISTBOX控件,用于顯示各個(gè)buffer中的當(dāng)前內(nèi)容。(2) 添加了3個(gè)編輯框控件,分別用于對(duì)3個(gè)容器(buffer)容量的控制。(3) 添加1個(gè)編輯框控件用于輸入數(shù)值確定線程執(zhí)行速度。(4) 添加5個(gè)編輯框控件,用于對(duì)生產(chǎn)者,移動(dòng)物流,消費(fèi)者數(shù)量的控制。五個(gè)線程用于對(duì)buffer容器的控制(PUTTER,MOVER1,MOVER2,GETTER1,GETTER2):(1) PU
7、TTER線程產(chǎn)生隨機(jī)字符,并放入buffer1中,實(shí)現(xiàn)生產(chǎn)者的生產(chǎn)過程。(2) MOVER1,MOVER2線程分別將buffer1中的數(shù)據(jù)移動(dòng)至buffer2 和buffer3中。(3) GETTER1,GETTER2線程分別將buffer2和buffer3中的數(shù)據(jù)字符移出,實(shí)現(xiàn)消費(fèi)者的消費(fèi)過程。多個(gè)變量分別統(tǒng)計(jì)需要顯示的數(shù)據(jù):(1) 三個(gè)變量分別統(tǒng)計(jì)buffer1,buffer2,buffer3中的數(shù)據(jù)并實(shí)時(shí)顯示出來。(2) 五個(gè)變量進(jìn)行數(shù)據(jù)匯總,顯示最后的運(yùn)行總時(shí)間,生產(chǎn)者生產(chǎn)數(shù)量,消費(fèi)者消費(fèi)數(shù)量 。 通過MFC的對(duì)話框中按鈕實(shí)現(xiàn)對(duì)所有線程的控制:(1) “開始”按鈕:開始所有線程,實(shí)現(xiàn)多
8、線程程序同步。(2) “結(jié)束”按鈕:結(jié)束所有線程,并顯示數(shù)據(jù)匯總情況。2.2 基本概念面向?qū)ο螅M(jìn)程,線程,線程的同步,線程的互斥,多道程序。2.3 基本原理經(jīng)典的生產(chǎn)者與消費(fèi)者同步原理,通過互斥體和互斥信號(hào)來實(shí)現(xiàn)線程的等待,線程間的同步問題,線程之間的協(xié)調(diào)的問題。3.總體設(shè)計(jì)3.1基本的技術(shù)路線:面向?qū)ο筮\(yùn)用面向?qū)ο蟮脑O(shè)計(jì)理念,設(shè)計(jì)所要求的PUTTER,MOVER1,MOVER2,GETTER1,GETTER2五個(gè)線程,達(dá)到信號(hào)量的控制,變量的值確定,實(shí)現(xiàn)BUFFER一次只能操作一個(gè)動(dòng)作,實(shí)現(xiàn)線程的同步,阻塞以及他們之間的協(xié)調(diào)問題。Pca對(duì)話框類:主界面設(shè)計(jì)、顯示數(shù)據(jù)、過程演示PUTTER線
9、程:生產(chǎn)者:執(zhí)行put操作MOVER1線程:搬運(yùn)者1:執(zhí)行move1操作GETTER1線程:消費(fèi)者1:執(zhí)行g(shù)et 操作MOVER2線程:搬運(yùn)者2:執(zhí)行move2操作GETTER2線程:消費(fèi)者2:執(zhí)行g(shù)et操作3.2 模塊關(guān)系及總體流程 圖1. 模塊關(guān)系參數(shù)設(shè)定(或使用默認(rèn)數(shù)據(jù))開始運(yùn)行(速度控制)結(jié)束動(dòng)態(tài)顯示每個(gè)buffer中的字符數(shù)據(jù)內(nèi)容,移動(dòng)過程以及數(shù)量數(shù)據(jù)匯總顯示退出 圖2.總體流程4.詳細(xì)設(shè)計(jì) 4.1變量設(shè)計(jì) g_hMutex1,g_hMutex2,g_hMutex3:三個(gè)互斥體,分別控制一次只能對(duì)buffer實(shí)現(xiàn)一次操作。 g_hFullItems1,g_hFullItems2,g_
10、hFullItems3 g_hEmptyItems1,g_hEmptyItems2,g_hEmptyItems3: 六個(gè)信號(hào)量,分別控制buffer中是否有空閑空間以及是否有數(shù)據(jù)可供移動(dòng),并進(jìn)行互斥操作。 clock_t類型的 start,finish變量,通過調(diào)用clock()函數(shù)得到線程運(yùn)行的總時(shí)間。 struct PThread int ptid; CpacDlg * dlg; 定義線程的結(jié)構(gòu)體,用于線程通過結(jié)構(gòu)體參數(shù)調(diào)用窗口類,從而實(shí)現(xiàn)線程對(duì)窗口的控制。 SIZE_1, SIZE_2, SIZE_3:編輯框控件添加的變量,從而實(shí)現(xiàn)動(dòng)態(tài)對(duì)容器buffer容量的控制。 SPEED:控件添加
11、的變量,實(shí)現(xiàn)對(duì)線程速度的控制。 Produce_Num ,Consumer1_Num ,Consumer2_Num ,Move1_Num ,Move2_Num:控件添加的變量,實(shí)現(xiàn)對(duì)生產(chǎn)者,消費(fèi)者,物流移動(dòng)數(shù)量的控制。 Con1_Num ,Pro_Num ,Con2_Num ,Con_Num:控件添加的變量,實(shí)現(xiàn)最終的數(shù)據(jù)統(tǒng)計(jì)匯總顯示。 Buffer1,buffer2,buffer3:ListBox控件添加的控制變量,用于顯示各個(gè)buffer中的字符數(shù)據(jù)內(nèi)容。4.2線程的設(shè)計(jì) PUTTER線程產(chǎn)生隨機(jī)字符,并放入buffer1中,實(shí)現(xiàn)生產(chǎn)者的生產(chǎn)過程。 DWORD WINAPI PUTTER(
12、LPVOID para)/PUT線程其參數(shù)為 LPVOID para ,在創(chuàng)建線程時(shí)通過P_hThreadsi =CreateThread(NULL,0,PUTTER,(LPVOID)&pthread0,0,&putIDi); 語句,第四個(gè)參數(shù)傳遞了結(jié)構(gòu)體參數(shù),將當(dāng)前對(duì)話框窗口類指針傳遞給線程函數(shù),通過PThread * pthread = (PThread *)para;/規(guī)范化參數(shù)CpacDlg * dlg = pthread-dlg; 語句來實(shí)現(xiàn)對(duì)當(dāng)前對(duì)話框窗口中所有參數(shù)的調(diào)用。 MOVER1,MOVER2,GETTER1,GETTER2線程與PUTTER線程類似。4.3 button按
13、鈕的設(shè)計(jì) “開始”按鈕: 創(chuàng)建每個(gè)互斥體,互斥信號(hào)以及線程。 void CpacDlg:OnBnClickedButton1()/ TODO: 在此添加控件通知處理程序代碼UpdateData(1);g_hMutex1 = :CreateMutex(NULL,FALSE,NULL);/buff1互斥鎖 g_hFullItems1 = :CreateSemaphore(NULL,0,SIZE_1,NULL); /buff1信號(hào)量 g_hEmptyItems1 = :CreateSemaphore(NULL,SIZE_1, SIZE_1,NULL); 。 。 /創(chuàng)建PUT線程 for (int i
14、=0;iProduce_Num;+i)pthread0.dlg = this;pthread0.ptid = i; P_hThreadsi =CreateThread(NULL,0,PUTTER,(LPVOID)&pthread0,0,&putIDi);/if(P_hThreadsi = NULL) MessageBox(TEXT(線程創(chuàng)建錯(cuò)誤!); 。 。 “結(jié)束”按鈕: 結(jié)束每一個(gè)線程,并進(jìn)行數(shù)據(jù)匯總顯示到對(duì)話框上。void CpacDlg:OnBnClickedButton2() / TODO: 在此添加控件通知處理程序代碼/UpdateData(1);DWORD KP_Thread10
15、;for(int i=0;idlg;int i = pthread-ptid;int j=dlg-SPEED;int speed = 1000*j;LARGE_INTEGER nFrequency;/設(shè)置隨機(jī)數(shù)的種子 if(:QueryPerformanceFrequency(&nFrequency) / 如果支持高性能精度計(jì)數(shù)器,則使用其初始化隨機(jī)種子(微秒級(jí)) LARGE_INTEGER nStartCounter; :QueryPerformanceCounter(&nStartCounter); :srand(unsigned)nStartCounter.LowPart); else
16、/ 否則使用當(dāng)前系統(tǒng)時(shí)間初始化隨機(jī)種子(毫秒級(jí)) :srand(unsigned)time(NULL); while(true) CString buf; WaitForSingleObject(g_hEmptyItems1,INFINITE); /進(jìn)行P操作 WaitForSingleObject(g_hMutex1,INFINITE); /產(chǎn)生隨機(jī)字符(A-Z)char ch;ch = char ( (rand() % 26) + 65 );buf.Format(_T(put-%c),ch);dlg-buffer1.InsertString(0,buf);dlg-Pro_Num+;/確定生
17、產(chǎn)總數(shù)量int buf1c;/確定當(dāng)前buffer1中的產(chǎn)品數(shù)量CString str;buf1c = dlg-buffer1.GetCount();str.Format(_T(%d個(gè)),buf1c);dlg-Buffer_C.SetWindowTextW(str); /在窗口中顯示當(dāng)前buffer1的數(shù)據(jù)數(shù)量 :Sleep(speed); /速度設(shè)置ReleaseMutex(g_hMutex1); /進(jìn)行V操作ReleaseSemaphore(g_hFullItems1,1,NULL); return 0;MOVER1線程的設(shè)計(jì):DWORD WINAPI MOVER1(LPVOID para
18、)/MOVE1線程PThread * pthread = (PThread *) para; /規(guī)范化參數(shù)CpacDlg * dlg = pthread-dlg;int i = pthread-ptid;int j=(dlg-SPEED);int speed =1000*j;while(true) WaitForSingleObject(g_hFullItems1,INFINITE); /進(jìn)行P操作 WaitForSingleObject(g_hEmptyItems2,INFINITE); WaitForSingleObject(g_hMutex1,INFINITE); WaitForSing
19、leObject(g_hMutex2,INFINITE); /將buffer1中的數(shù)據(jù)移至buffer2中 CString cs; int n; n = dlg-buffer1.GetCount(); dlg-buffer1.GetText(n-1,cs); dlg-buffer1.DeleteString(n-1); CString cc; cc.Format(_T(move1-); cs = cc + cs; dlg-buffer2.InsertString(0,cs); int buf1c;/確定當(dāng)前buffer1中的產(chǎn)品數(shù)量 CString str; buf1c = dlg-buffe
20、r1.GetCount(); str.Format(_T(%d個(gè)),buf1c); dlg-Buffer_C.SetWindowTextW(str); /顯示當(dāng)前buffer1中的產(chǎn)品數(shù)量 int buf2c;/確定當(dāng)前buffer2中的產(chǎn)品數(shù)量 CString str1; buf2c = dlg-buffer2.GetCount(); str1.Format(_T(%d個(gè)),buf2c); dlg-Buf_C1.SetWindowTextW(str1); /顯示當(dāng)前buffer2中的產(chǎn)品數(shù)量 :Sleep(speed); /設(shè)置速度 ReleaseMutex(g_hMutex2); /進(jìn)行V
21、操作 ReleaseMutex(g_hMutex1); ReleaseSemaphore(g_hFullItems2,1,NULL); ReleaseSemaphore(g_hEmptyItems1,1,NULL); return 0;GETTER1線程的設(shè)計(jì):DWORD WINAPI GETTER1(LPVOID para) /GET1線程PThread * pthread = (PThread *)para;/規(guī)范化參數(shù)CpacDlg * dlg = pthread-dlg;int i = pthread-ptid;int j=(dlg-SPEED);int speed =1000*j ;
22、while(true)WaitForSingleObject(g_hFullItems2,INFINITE); /進(jìn)行P操作WaitForSingleObject(g_hMutex2,INFINITE); /移出buffer2中的數(shù)據(jù) CString cs; int n; n = dlg-buffer2.GetCount(); dlg-buffer2.GetText(n-1,cs); dlg-buffer2.DeleteString(n-1); dlg-Con1_Num = dlg-Con1_Num + 1; /消費(fèi)者1消費(fèi)的產(chǎn)品數(shù)量加1 int buf2c; /確定當(dāng)前buffer2中的產(chǎn)品
23、數(shù)量 CString str1; buf2c = dlg-buffer2.GetCount(); str1.Format(_T(%d個(gè)),buf2c); dlg-Buf_C1.SetWindowTextW(str1); :Sleep(speed); /設(shè)置速度ReleaseMutex(g_hMutex2); /進(jìn)行V操作ReleaseSemaphore(g_hEmptyItems2,1,NULL);return 0; “開始”按鈕的設(shè)計(jì):void CpacDlg:OnBnClickedButton1()/ TODO: 在此添加控件通知處理程序代碼UpdateData(1);g_hMutex1
24、= :CreateMutex(NULL,FALSE,NULL);/buff1互斥鎖 g_hFullItems1 = :CreateSemaphore(NULL,0,SIZE_1,NULL); /buff1信號(hào)量 g_hEmptyItems1 = :CreateSemaphore(NULL,SIZE_1, SIZE_1,NULL);g_hMutex2 = :CreateMutex(NULL,FALSE,NULL); g_hFullItems2 = :CreateSemaphore(NULL,0,SIZE_2,NULL); /buff2互斥鎖 g_hEmptyItems2 = :CreateSem
25、aphore(NULL,SIZE_2, SIZE_2,NULL);g_hMutex3 = :CreateMutex(NULL,FALSE,NULL); g_hFullItems3 = :CreateSemaphore(NULL,0,SIZE_3,NULL); /buff3互斥鎖 g_hEmptyItems3 = :CreateSemaphore(NULL,SIZE_3, SIZE_3,NULL);start = clock(); /獲得線程開始時(shí)間 /創(chuàng)建PUT線程 for (int i=0;iProduce_Num;+i)pthread0.dlg = this;pthread0.ptid =
26、 i; P_hThreadsi =CreateThread(NULL,0,PUTTER,(LPVOID)&pthread0,0,&putIDi);/if(P_hThreadsi = NULL) MessageBox(TEXT(線程創(chuàng)建錯(cuò)誤!); /創(chuàng)建MOVE1和MOVE2線程 for(int j=0;jMove1_Num;+j)pthread1.dlg = this;pthread1.ptid = j; M1_hThreadsj =CreateThread(NULL,0,MOVER1,(LPVOID)&pthread1,0,&move1IDj);if(M1_hThreadsj = NULL)
27、 MessageBox(TEXT(線程創(chuàng)建錯(cuò)誤!); for(int k=0;kMove2_Num;+k)pthread2.dlg = this;pthread2.ptid = k; M2_hThreadsk =CreateThread(NULL,0,MOVER2,(LPVOID)&pthread2,0,&move2IDk);if(M2_hThreadsk = NULL) MessageBox(TEXT(線程創(chuàng)建錯(cuò)誤!); /創(chuàng)建GET1和GET2線程for (int m=0;mConsumer1_Num;+m)pthread3.dlg = this;pthread3.ptid = m; C1
28、_hThreadsm =CreateThread(NULL,0,GETTER1,(LPVOID)&pthread3,0,&get1IDm);if(C1_hThreadsm = NULL) MessageBox(TEXT(線程創(chuàng)建錯(cuò)誤!); for (int n=0;nConsumer2_Num;+n)pthread4.dlg = this;pthread4.ptid = n; C2_hThreadsn =CreateThread(NULL,0,GETTER2,(LPVOID)&pthread4,0,&get2IDn);if(C2_hThreadsn = NULL) MessageBox(TEX
29、T(線程創(chuàng)建錯(cuò)誤!); “結(jié)束”按鈕的設(shè)計(jì):void CpacDlg:OnBnClickedButton2() / TODO: 在此添加控件通知處理程序代碼/UpdateData(1);DWORD KP_Thread10;for(int i=0;iProduce_Num;i+)/GetExitCodeThread(P_hThreadsi,&KP_Threadi);TerminateThread(P_hThreadsi,KP_Threadi); /結(jié)束線程/ExitThread(KP_Threadi);DWORD KM1_Thread1;for(int i=0;iMove1_Num;i+)/Ge
30、tExitCodeThread(M1_hThreadsi,&KM1_Threadi);TerminateThread(M1_hThreadsi,KM1_Threadi);/ExitThread(KM1_Threadi);DWORD KM2_Thread1;for(int i=0;iMove2_Num;i+)/GetExitCodeThread(M2_hThreadsi,&KM2_Threadi);TerminateThread(M2_hThreadsi,KM2_Threadi);/ExitThread(KM2_Threadi);DWORD KC1_Thread10;for(int i=0;iC
31、onsumer1_Num;i+)/GetExitCodeThread(C1_hThreadsi,&KC1_Threadi);TerminateThread(C1_hThreadsi,KC1_Threadi);DWORD KC2_Thread10;for(int i=0;iConsumer2_Num;i+)TerminateThread(C1_hThreadsi,KC2_Threadi);double duration;finish = clock(); /得到線程結(jié)束時(shí)間duration = double (finish - start)/ CLOCKS_PER_SEC); /得到線程運(yùn)行總時(shí)間CString str4;str4.Format(_T(%2.4f秒),duration);CLOCK.SetWindowTextW(str4); /輸出線程運(yùn)行總時(shí)間CString str;str.Format(_T(%d個(gè)),Pro_Num);Pro_NUM.SetWindowTextW(str); /輸出生產(chǎn)者最終生產(chǎn)總數(shù)CString str1;str1.Format(_T(%d個(gè)),Con1_Nu
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 債務(wù)劃清責(zé)任合同范本簡易
- 雙軟認(rèn)證合同范本
- 農(nóng)村房屋合同范例
- 不買社保勞務(wù)合同范本
- 合作木柴出售合同范本
- 公司裁員合同范本
- 廠房回收拆除合同范例
- 農(nóng)村果林租賃合同范本
- 印花材料供應(yīng)合同范本
- 東麗區(qū)恒溫配送合同范本
- 職業(yè)生涯規(guī)劃的步驟與方法課件
- 2024解析:第十五章電流和電路-講核心(解析版)
- 米勒黑曼策略銷售培訓(xùn)
- 2024年下半年東方電氣長三角(杭州)創(chuàng)新研究院限公司第二批招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2020-2024年五年高考語文真題分類匯編專題04 古代詩歌鑒賞(解析版)
- 【重點(diǎn)易錯(cuò)題每日一練小紙條】二年級(jí)數(shù)學(xué)下冊(cè)
- 2024年小紅書初級(jí)營銷師題庫
- 2022年公務(wù)員多省聯(lián)考《申論》真題(重慶二卷)及答案解析
- -2012橋梁樁基施工方案
- 課題1 碳單質(zhì)的多樣性(第1課時(shí))課件九年級(jí)化學(xué)上冊(cè)人教版2024
- 康復(fù)醫(yī)學(xué)題庫與答案
評(píng)論
0/150
提交評(píng)論