版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、線程和進(jìn)程1-線程和進(jìn)程的區(qū)別:線程:是一種輕量級(jí)進(jìn)程,線程存在于進(jìn)程中。線程和進(jìn)程一樣都會(huì)被操作系統(tǒng)調(diào)度(時(shí)間片)通常線程指的是共享相同地址空間的多個(gè)任務(wù)。線程優(yōu)勢(shì):線程運(yùn)行時(shí),相互切換效率高;線程之間共享數(shù)據(jù)很方便。進(jìn)程擁有獨(dú)立的運(yùn)行空間,一個(gè)進(jìn)程崩潰后,在保護(hù)模式下并不會(huì)影響其他的進(jìn)程。一個(gè)進(jìn)程中可以包含有多個(gè)線程,而一個(gè)線程只能包含在進(jìn)程中。一個(gè)線程擁有自己獨(dú)有的局部變量棧,但是沒(méi)有獨(dú)立的空間,一個(gè)進(jìn)程中多個(gè)線程共同共享一塊資源,因此當(dāng)一個(gè)線程崩潰后此進(jìn)程也會(huì)崩潰。因此多進(jìn)程要比多線程健壯性要好,但是,多進(jìn)程效率比較低。當(dāng)需要并行操作和共享某些變量最好使用多線程的模式。2關(guān)于線程的創(chuàng)建
2、:n int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void * (* routine)(void *), void *arg)n 參數(shù):thread, 線程的標(biāo)識(shí)符(類(lèi)似于進(jìn)程的pid號(hào)) attr, 用于指定創(chuàng)建的線程的屬性, 通常為NULL(不需要設(shè)置) routine, 函數(shù)指針,該函數(shù)就是線程主體 arg, 就是傳遞給函數(shù)的參數(shù)。返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào)n int pthread_exit(void *value_ptr) n 功能:只會(huì)導(dǎo)致當(dāng)前線程的退出函數(shù)n 參數(shù):就是傳遞的退
3、出狀態(tài)(指針)n 通常使用: pthread_exit(0); n 返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào)n 進(jìn)程對(duì)已經(jīng)退出的線程必須要做回收線程資源的操作(否則會(huì)產(chǎn)生僵尸線程)n int pthread_join(pthread_t thread, void *value_ptr) n 功能:阻塞等待回收退出的線程的資源n 參數(shù): thread, 就是指定要回收的線程資源 value_ptr, 就是接收到線程的退出狀態(tài)。n 返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào) 3線程的控制:n 互斥鎖 :主要用來(lái)保護(hù)臨界資源(可是變量,后者是代碼段) 任何時(shí)刻最多只能有一個(gè)線程能訪問(wèn)該資源相關(guān)函數(shù)
4、接口:n int pthread_mutex_init(pthread_mutex_t *mutex, pthread_mutexattr_t *attr)n 功能:鎖的初始化函數(shù),即生成一把鎖n 參數(shù): mutex, 是鎖的標(biāo)識(shí)符 attr, 設(shè)置鎖的屬性, 通常為NULL。n 返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào) n int pthread_mutex_lock(pthread_mutex_t *mutex)n 功能:阻塞等待直到這把鎖申請(qǐng)成功為止,對(duì)臨界資源進(jìn)行上鎖操作n 參數(shù): mutex, 就是指定的一把鎖 n 返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào)n int pthrea
5、d_mutex_unlock(pthread_mutex_t *mutex) n 功能:對(duì)臨界資源進(jìn)行解鎖操作n 參數(shù): mutex, 就是指定要解開(kāi)的鎖 n 返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào) n int pthread_mutex_destroy(pthread_mutex_t *mutex);n 功能:銷(xiāo)毀一把指定的鎖n 參數(shù): mutex, 就是指定要銷(xiāo)毀的鎖 n 返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào)注意: 為了避免死鎖:在申請(qǐng)多把鎖時(shí),所有的線程都按照同樣的順序去申請(qǐng)。4線程之間的通信:int pthread_cond_init(pthread_cond_t *rest
6、rict cond,const pthread_condattr_t *restrict attr);n 功能:初始化一個(gè)條件變量n 參數(shù):cond, 就是條件變量的標(biāo)識(shí)符 attr, 通常為NULL即可n 返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào) n int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex);n 功能:條件睡眠,直到被指定的條件喚醒為止n 參數(shù): cond, 就是指定睡眠 條件,將來(lái)被喚醒時(shí)也必須滿足該條件 mutex, 該函數(shù)睡眠時(shí)必須提前加上一把鎖n 注意:
7、該睡眠函數(shù)調(diào)用之前必須先加上一把鎖,然后進(jìn)入睡眠,然后該函數(shù)內(nèi)部n 將鎖解開(kāi);當(dāng)該函數(shù)被喚醒時(shí),需要重新加上這把鎖,如果發(fā)現(xiàn)這把鎖被其他線程 占用,那么該函數(shù)的喚醒操作就失敗了,繼續(xù)睡眠。 n 返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào) n int pthread_cond_signal(pthread_cond_t *cond);n 功能:就是喚醒睡眠在cond條件上的線程,但是只能喚醒一個(gè)線程n 參數(shù): cond, 就是指定要喚醒的條件n 返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào) n int pthread_cond_broadcast(pthread_cond_t *cond);n 功
8、能:?jiǎn)拘阉兴哌@個(gè)條件上的線程n int pthread_cond_destroy(pthread_cond_t *cond);n 功能:就是銷(xiāo)毀條件變量 5-處理消息隊(duì)列n 創(chuàng)建/打開(kāi)消息隊(duì)列對(duì)象n int msgget(key_t key, int flag);n 參數(shù):key, ftok()函數(shù)的返回值,用于確保多個(gè)進(jìn)程操作同一個(gè)消息隊(duì)列n flag, IPC_CREAT IPC_EXCL 和共享內(nèi)存一樣n 返回值:成功返回消息隊(duì)列的標(biāo)識(shí)符, 失敗-1n 比如:msgget(key, IPC_CREAT|IPC_EXCL|0666);n int msgsnd(int msqid, co
9、nst void *msgp, size_t msgsz, int msgflg);n 參數(shù):msgid, msgget的返回值 msgp, 要發(fā)送的數(shù)據(jù)的指針,有指定的數(shù)據(jù)格式。 struct msgbuf long mtype; /* message type, must be > 0 */ 數(shù)據(jù)類(lèi)型,可以自定義; /* message data */ int a; char b; float f; ; msgsz, 發(fā)送的消息的正文的長(zhǎng)度 = sizeof(struct msgbuf) - sizeof(long) msgflg,IPC_NOWAIT 以非阻塞方式發(fā)送消息,如果發(fā)送
10、不成功,那么不會(huì)阻塞,立刻返回。n 0(常用), 以阻塞方式發(fā)送消息,如果發(fā)送不成功,那么阻塞等待,直到發(fā)送成功為止。n 返回值:成功0, 失敗-1n ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);n 參數(shù):msqid, msgget的返回值 msgp, 用于接收讀取到的消息,固定格式,必須和發(fā)送的類(lèi)型保持一致。 msgsz, 仍然要接收的消息的正文長(zhǎng)度 msgtyp, 0, 表示讀取第一條消息 > 0, 表示讀取指定類(lèi)型消息(最常用) <0, 接收消息隊(duì)列中類(lèi)型值不小于ms
11、gtyp的絕對(duì)值且類(lèi)型值又最小的消息 msgflg, IPC_NOWAIT 以非阻塞方式接收消息,如果接收不成功,那么不會(huì)阻塞,立刻返回。 0(常用), 以阻塞方式接收消息,如果接收不成功,那么阻塞等待,直到接收成功為止。n 返回值:實(shí)際接收到的消息的正文的字節(jié)個(gè)數(shù) , 失敗-1. n 消息隊(duì)列的控制函數(shù)n int msgctl ( int msgqid, int cmd, struct msqid_ds *buf );n 參數(shù): msgqid, 就是控制的消息隊(duì)列 cmd : IPC_STAT (獲取對(duì)象屬性), 屬性保存在第三個(gè)參數(shù)上 IPC_SET (設(shè)置對(duì)象屬性),第三個(gè)參數(shù)保存的是要
12、修改的屬性 IPC_RMID (刪除對(duì)象), 此時(shí)第三個(gè)參數(shù)為NULL即可n 返回值:返回值和cmd有關(guān)系, 失敗-1.6共享內(nèi)存n 共享內(nèi)存:是一種最為高效的進(jìn)程間通信方式,進(jìn)程可以直接讀寫(xiě)內(nèi)存,而不需要任何數(shù)據(jù)的拷貝n 注意:由于多個(gè)進(jìn)程共享一段內(nèi)存,因此也需要依靠某種同步機(jī)制來(lái)控制對(duì)它的寫(xiě)操作,如互斥鎖和信號(hào)量等 n #include <sys/shm.h>n key_t ftok(const char *pathname, int proj_id);n 功能:就是生成key值。n 參數(shù):pathname, 任意一個(gè)存在的路徑都可以 proj_id, 只要低8位(二進(jìn)制)不全
13、為0的數(shù)都可以n 返回值:成功key值, 失敗-1. n 比如:key = ftok(".", 'a');n 創(chuàng)建/打開(kāi)共享內(nèi)存:創(chuàng)建于當(dāng)前系統(tǒng)上,保存到系統(tǒng)關(guān)閉為止。n int shmget(key_t key, int size, int shmflg);n 參數(shù):key, 用于唯一的標(biāo)識(shí)一塊共享內(nèi)存,將來(lái)其他進(jìn)程需要使用一樣的key值。 IPC_PRIVATE,表示該物理空間只能自己用,無(wú)法和其他進(jìn)程共享。 ftok()函數(shù)的返回值 size, 要申請(qǐng)的共享內(nèi)存物理空間, /usr/inclue/linux/shm.h中包含限制 shmflg, IPC
14、_CREAT IPC_EXCLIPC_CREAT 如果共享內(nèi)存不存在,則創(chuàng)建一個(gè)共享內(nèi)存,否則打開(kāi)操作。IPC_EXCL 只有在共享內(nèi)存不存在的時(shí)候,新的共享內(nèi)存才建立,否則就產(chǎn)生錯(cuò)誤。n 返回值:就是共享內(nèi)存的標(biāo)識(shí)符(大于0),失敗-1. 比如:key = ftok(".", 'a');int shmid;shmid = shmget(key, 512, IPC_CREAT|IPC_EXCL|0666);n 映射共享內(nèi)存,即把指定的共享內(nèi)存映射到進(jìn)程的地址空間用于訪問(wèn)n void *shmat(int shmid, const void *shmaddr,
15、 int shmflg);n 參數(shù):shmid, 就是shmget的返回值 shmaddr, 用于指定共享內(nèi)存映射到當(dāng)前進(jìn)程的那個(gè)起始地址上 如果為NULL, 那么系統(tǒng)幫助進(jìn)程分配(最常用) 如果非NULL, 那么就是自己指定(必須保證這塊空間沒(méi)有被使用) shmflg, 指定進(jìn)程對(duì)該內(nèi)存區(qū)域的讀寫(xiě)權(quán)限 如果為SHM_RDONLY ,那么當(dāng)前進(jìn)程只讀 如果為0, 那么當(dāng)前進(jìn)程可讀可寫(xiě)(最常用)n 返回值:返回當(dāng)前進(jìn)程和共享內(nèi)存映射后的起始地址 失敗返回的為(void*)(-1)撤銷(xiāo)共享內(nèi)存映射n int shmdt(const void *shmaddr);p 參數(shù):shmaddr, 就是sh
16、mat的返回值p 返回值:成功0, 失敗-1p 操作共享內(nèi)存對(duì)象n int shmctl(int shmid, int cmd, struct shmid_ds *buf); / 獲取共享內(nèi)存的狀態(tài),并把相關(guān)的屬性賦值給bufp 功能:控制共享內(nèi)存對(duì)象p 參數(shù): shmid, shmget的返回值 cmd : IPC_STAT (獲取對(duì)象屬性), 屬性保存在第三個(gè)參數(shù)上 IPC_SET (設(shè)置對(duì)象屬性),第三個(gè)參數(shù)保存的是要修改的屬性 IPC_RMID (刪除對(duì)象), 此時(shí)第三個(gè)參數(shù)為NULL即可p 返回值:返回值和cmd有關(guān)系, 失敗-1.n 比如:shmctl(shmid, IPC_RMI
17、D, NULL); n 創(chuàng)建/打開(kāi)信號(hào)量集合n int semget(key_t key, int nsems, int semflg);n 參數(shù):n key, ftok()返回值n nsems, 指定的信號(hào)量集合中的信號(hào)量個(gè)數(shù)n semflg, n IPC_CREATn IPC_EXCLn IPC_CREAT 如果共享內(nèi)存不存在,則創(chuàng)建一個(gè)共享內(nèi)存,否則打開(kāi)操作。n IPC_EXCL 只有在共享內(nèi)存不存在的時(shí)候,新的共享內(nèi)存才建立,否則就產(chǎn)生錯(cuò)誤。n 返回值:返回該集合的標(biāo)識(shí)符,失敗-1. n n int semctl(int semid, int semnum, int cmd, .);p
18、 功能:信號(hào)量集合的控制p 參數(shù):semid, 指定要操作的集合 semnum, 要操作的信號(hào)量的編號(hào),編號(hào)從0開(kāi)始 cmd,GETVAL:獲取信號(hào)燈的值, 返回值是獲得值。 比如:value = semctl(semid, 0, GETVAL); SETVAL:設(shè)置信號(hào)燈的值,需要用到第四個(gè)參數(shù)。因此在設(shè)置信號(hào)燈的值時(shí)應(yīng)該及時(shí)的設(shè)置共用體semun的值 第四個(gè)參數(shù)類(lèi)型如下: union semun int val; /* Value for SETVAL */ struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */ unsigned
19、short *array; /* Array for GETALL, SETALL */ struct seminfo *_buf; /* Buffer for IPC_INFO (Linux-specific) */ ;n int semop ( int semid, struct sembuf *opsptr, unsigned nops);n 功能:就是對(duì)信號(hào)量集合中的信號(hào)量進(jìn)行PV操作n 參數(shù): semid, 指定要操作的集合 opsptr, struct sembuf unsigned short sem_num; /* semaphore number */ short sem_o
20、p; /* semaphore operation */ short sem_flg; /* operation flags */ ; 成員分析: sem_num 表示要操作的信號(hào)量的編號(hào) sem_op, 表示進(jìn)行P或者V操作, 比如:sem_op = 10(+10) sem_op = -10(-10) sem_op = 0, 那么semop函數(shù)會(huì)等到該信號(hào)量的值變?yōu)?為止。 sem_flg, 0(最常用的),表示semop函數(shù)的操作是阻塞的,直到成功為止。 IPC_NOWAIT,表示semop函數(shù)的操作是非阻塞的,如果操作沒(méi)有成功,立刻返回。 SEM_UNDO(不常用),設(shè)置只對(duì)當(dāng)前進(jìn)程有效
21、,不會(huì)保存到系統(tǒng)的信號(hào)量集合中。 nops, 調(diào)用一次semop要操作的信號(hào)量的個(gè)數(shù)n 返回值:成功0, 失敗-1 7-linux 管道、消息隊(duì)列、共享內(nèi)存的對(duì)比n 管道的優(yōu)點(diǎn)是不需要加鎖,缺點(diǎn)是默認(rèn)緩沖區(qū)太小,只有4K,同時(shí)只適合父子進(jìn)程間通信,而且一個(gè)管道只適合單向通信,如果要雙向通信需要建立兩個(gè)。而且不適合多個(gè)子進(jìn)程,因?yàn)橄?huì)亂,它的發(fā)送接收機(jī)制是用read/write這種適用流的,缺點(diǎn)是數(shù)據(jù)本身沒(méi)有邊界,需要應(yīng)用程序自己解釋?zhuān)话阆⒋蠖嗍且粋€(gè)固定長(zhǎng)的消息頭,和一個(gè)變長(zhǎng)的消息體,一個(gè)子進(jìn)程從管道read到消息頭后,消息體可能被別的子進(jìn)程接收到n 消息隊(duì)列也不要加鎖,默認(rèn)緩沖區(qū)和單消
22、息上限都要大一些,在我的suse10上是64K,它并不局限于父子進(jìn)程間通信,只要一個(gè)相同的key,就可以讓不同的進(jìn)程定位到同一個(gè)消息隊(duì)列上,它也可以用來(lái)給雙向通信,不過(guò)稍微加個(gè)標(biāo)識(shí),可以通過(guò)消息中的type進(jìn)行區(qū)分,比如一個(gè)任務(wù)分派進(jìn)程,創(chuàng)建了若干個(gè)執(zhí)行子進(jìn)程,不管是父進(jìn)程發(fā)送分派任務(wù)的消息,還是子進(jìn)程發(fā)送任務(wù)執(zhí)行的消息,都將type設(shè)置為目標(biāo)進(jìn)程的pid,因?yàn)閙sgrcv可以指定只接收消息類(lèi)型為type的消息,這樣就實(shí)現(xiàn)了子進(jìn)程只接收自己的任務(wù),父進(jìn)程只接收任務(wù)結(jié)果n 共享內(nèi)存的幾乎可以認(rèn)為沒(méi)有上限,它也是不局限與父子進(jìn)程,采用跟消息隊(duì)列類(lèi)似的定位方式,因?yàn)閮?nèi)存是共享的,不存在任何單向的限制
23、,最大的問(wèn)題就是需要應(yīng)用程序自己做互斥,有如下幾種方案1 只適用兩個(gè)進(jìn)程共享,在內(nèi)存中放一個(gè)標(biāo)志位,一定要聲明為volatile,大家基于標(biāo)志位來(lái)互斥,例如為0時(shí)第一個(gè)可以寫(xiě),第二個(gè)就等待,為1時(shí)第一個(gè)等待,第二個(gè)可以寫(xiě)/讀2 也只適用兩個(gè)進(jìn)程,是用信號(hào),大家等待不同的信號(hào),第一個(gè)寫(xiě)完了發(fā)送信號(hào)2,等待信號(hào)1,第二個(gè)等待信號(hào)2,收到后讀取/寫(xiě)入完,發(fā)送信號(hào)1,它不是用更多進(jìn)程是因?yàn)殡m然父進(jìn)程可以向不同子進(jìn)程分別發(fā)送信號(hào),但是子進(jìn)程收到信號(hào)會(huì)同時(shí)訪問(wèn)共享內(nèi)存,產(chǎn)生不同子進(jìn)程間的競(jìng)態(tài)條件,如果用多塊共享內(nèi)存,又存在子進(jìn)程發(fā)送結(jié)果通知信號(hào)時(shí),父進(jìn)程收到信號(hào)后,不知道是誰(shuí)發(fā)送,也意味著不知道該訪問(wèn)哪塊
24、共享內(nèi)存,即使子進(jìn)程發(fā)送不同的結(jié)果通知信號(hào),因?yàn)榈却盘?hào)的一定是阻塞的,如果某個(gè)子進(jìn)程意外終止,父進(jìn)程將永遠(yuǎn)阻塞下去,而不能超時(shí)處理3 采用信號(hào)量或者msgctl自己的加鎖、解鎖功能,不過(guò)后者只適用于linux總結(jié):n 管道是最弱的,只適合有限場(chǎng)景;n 消息隊(duì)列能適合大部分場(chǎng)景,缺點(diǎn)是默認(rèn)緩沖也比較小,不過(guò)這個(gè)可以調(diào)整,前提是你有管理員權(quán)限;n 共享內(nèi)存是最強(qiáng)大的,只是要做互斥n 進(jìn)程間通信: 1.管道(pipe)及有名管道(named pipe):管道可用于具有親緣關(guān)系的父子進(jìn)程間的通信,有名管道除了具有管道所具有的功能外,它還允許無(wú)親緣關(guān)系進(jìn)程間的通信。 2
25、.信號(hào)(signal):信號(hào)是在軟件層次上對(duì)中斷機(jī)制的一種模擬,它是比較復(fù)雜的通信方式,用于通知進(jìn)程有某事件發(fā)生,一個(gè)進(jìn)程收到一個(gè)信號(hào)與處理器收到一個(gè)中斷請(qǐng)求效果上可以說(shuō)是一致的。 3.消息隊(duì)列(message queue):消息隊(duì)列是消息的鏈接表,它克服了上兩種通信方式中信號(hào)量有限的缺點(diǎn),具有寫(xiě)權(quán)限得進(jìn)程可以按照一定得規(guī)則向消息隊(duì)列中添加新信息;對(duì)消息隊(duì)列有讀權(quán)限得進(jìn)程則可以從消息隊(duì)列中讀取信息。 4.共享內(nèi)存(shared memory):可以說(shuō)這是最有用的進(jìn)程間通信方式。它使得多個(gè)進(jìn)程可以訪問(wèn)同一塊內(nèi)存空間,不同進(jìn)程可以及時(shí)看到對(duì)方進(jìn)程中對(duì)共享
26、內(nèi)存中數(shù)據(jù)得更新。這種方式需要依靠某種同步操作,如互斥鎖和信號(hào)量等。 5.信號(hào)量(semaphore):主要作為進(jìn)程之間及同一種進(jìn)程的不同線程之間得同步和互斥手段。 6.套接字(socket):這是一種更為一般得進(jìn)程間通信機(jī)制,它可用于網(wǎng)絡(luò)中不同機(jī)器之間的進(jìn)程間通信,應(yīng)用非常廣泛while (1)pthread_mutex_lock(&mutex_sms);pthread_cond_wait(&cond_sms, &mutex_sms); /等待發(fā)送短信條件buf = dev_sms_cmd;printf ("pthread_sms is wa
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人貸款協(xié)議樣本(2024年度版)版
- 2025年度電商客服外包服務(wù)滿意度調(diào)查合同4篇
- 二零二五年度充值卡充值業(yè)務(wù)合作伙伴協(xié)議4篇
- 2025年度船舶船員聘用及船舶動(dòng)力系統(tǒng)維護(hù)合同4篇
- 二零二五年度工業(yè)地產(chǎn)承包招商合作協(xié)議書(shū)3篇
- 二零二五年度電力設(shè)備安裝工程師勞動(dòng)合同范本3篇
- 二零二五年度畜牧機(jī)械租賃及售后服務(wù)合同4篇
- 2025年度個(gè)人貸款合同擔(dān)保服務(wù)流程優(yōu)化4篇
- 2020-2025年中國(guó)旅游船行業(yè)市場(chǎng)運(yùn)營(yíng)現(xiàn)狀及投資規(guī)劃研究建議報(bào)告
- 2025年個(gè)人住宅安全設(shè)施維修與更換合同4篇
- 中國(guó)高血壓防治指南(2024年修訂版)要點(diǎn)解讀
- 2024-2030年中國(guó)光電干擾一體設(shè)備行業(yè)發(fā)展現(xiàn)狀與前景預(yù)測(cè)分析研究報(bào)告
- 湖南省岳陽(yáng)市岳陽(yáng)樓區(qū)2023-2024學(xué)年七年級(jí)下學(xué)期期末數(shù)學(xué)試題(解析版)
- 農(nóng)村自建房安全合同協(xié)議書(shū)
- 杜仲葉藥理作用及臨床應(yīng)用研究進(jìn)展
- 4S店售后服務(wù)6S管理新規(guī)制度
- 高性能建筑鋼材的研發(fā)與應(yīng)用
- 無(wú)線廣播行業(yè)現(xiàn)狀分析
- 漢語(yǔ)言溝通發(fā)展量表(長(zhǎng)表)-詞匯及手勢(shì)(8-16月齡)
- 高速公路相關(guān)知識(shí)講座
- 兒科關(guān)于抗生素使用的PDCA
評(píng)論
0/150
提交評(píng)論