freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linu進(jìn)程間通信(編輯修改稿)

2025-01-19 01:06 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 mop()對(duì)信號(hào)量 +1 或 1 或測(cè)試是否為 0 – int semop(int semid, struct sembuf *sops, unsigned nsops)。 – linux可以增加或減小信號(hào)量的值,相應(yīng)于對(duì)共享資源的釋放和占有 ? semctl 對(duì)信號(hào)量進(jìn)行各種控制 – int semctl(int semid, int semnum, int cmd, union semun arg) Linux 培 訓(xùn) semget函數(shù) ? include sys/ ? int semget(key_t key, int nsems, int oflag)。 ? 返回:成功時(shí)為非負(fù)標(biāo)識(shí)符,出錯(cuò)時(shí)為 1 ? 創(chuàng)建一個(gè)信號(hào)燈集或訪(fǎng)問(wèn)一個(gè)已存在的信號(hào)燈集。 ? 返回值是信號(hào)燈標(biāo)識(shí)符,供其他信號(hào)燈函數(shù)使用。 ? nsems是集合中的信號(hào)燈數(shù)。如果不是創(chuàng)建一個(gè)信號(hào)燈集,而只是訪(fǎng)問(wèn)已存在的集合,則該參數(shù)可以指定為 0。一旦創(chuàng)建完畢一個(gè)信號(hào)燈集,就不能改變其中的信號(hào)燈數(shù)。 ? 當(dāng)實(shí)際操作為創(chuàng)建一個(gè)新的信號(hào)燈集時(shí), semid_ds結(jié)構(gòu)的以下成員將被初始化: – sem_perm結(jié)構(gòu)的 uid和 cuid被設(shè)置為調(diào)用進(jìn)程的有效用戶(hù) ID, gid和 cgid被設(shè)置為調(diào)用進(jìn)程的有效組 ID; – oflag參數(shù)中的讀寫(xiě)權(quán)限存入 ; – sem_otime被設(shè)置為 0, sem_ctime被置為當(dāng)前時(shí)間; – sem_nsems被置為 nsems參數(shù)的值; – 與該集合中每個(gè)信號(hào)燈關(guān)聯(lián)的各個(gè) sem結(jié)構(gòu)并不初始化。這些結(jié)構(gòu)必須是在以SETVAL或 SETALL命令調(diào)用 semctl時(shí)初始化的。 Linux 培 訓(xùn) 信號(hào)量創(chuàng)建問(wèn)題 ? SystemV信號(hào)燈的創(chuàng)建和初始化需兩次函數(shù)調(diào)用是一個(gè)致命的缺陷,這會(huì)導(dǎo)致競(jìng)爭(zhēng)狀態(tài)的出現(xiàn)。 ? 解決競(jìng)爭(zhēng)狀態(tài)的方法是:當(dāng) semget創(chuàng)建一個(gè)新的信號(hào)燈集時(shí),其 semid_ds結(jié)構(gòu)的 sem_otime成員保證被設(shè)置為 0。該成員只是在 semop調(diào)用成功時(shí)才被設(shè)置為當(dāng)前值。在調(diào)用 semget進(jìn)行訪(fǎng)問(wèn)而不是創(chuàng)建時(shí),以 IPC_STAT命令調(diào)用semctl,然后等待 sem_otime變?yōu)榉橇阒?。到時(shí)就可斷定該信號(hào)燈已經(jīng)被初始化,而且對(duì)它初始化的進(jìn)程已成功完成 semop調(diào)用。所以,創(chuàng)建該信號(hào)燈集的進(jìn)程必須初始化它的值,而且必須在任何其他進(jìn)程可以使用該信號(hào)燈集之前調(diào)用 semop。 ? 這樣將會(huì)造成程序相當(dāng)復(fù)雜 Linux 培 訓(xùn) semop函數(shù) ? include sys/ ? int semop(int semid, struct sembuf *opsptr, size_t nops)。 ? 返回:成功時(shí)為 0,出錯(cuò)時(shí)為 1 ? 對(duì)一個(gè)或多個(gè)信號(hào)燈進(jìn)行操作。 ? opsptr指向如下結(jié)構(gòu)模板的數(shù)組 (該結(jié)構(gòu)可能不止如下幾個(gè)成員 ): – struct sembuf { – shrot sem_num。 /* semaphore number:0,1,..,nsems1 */ – short sem_op。 /* semaphore operation: 0,0, 0 */ – short sem_flg。 /* operation flags:0,IPC_NOWAIT,SEM_UNDO */ – }。 ? nops參數(shù)指出結(jié)構(gòu)數(shù)組中元素的個(gè)數(shù)。每個(gè)元素給目標(biāo)信號(hào)燈集中某個(gè)信號(hào)燈指定一個(gè)操作。特定的信號(hào)燈由 sem_num指定; sem_op指定特定的操作; sem_flg指定非阻塞 (IPC_NOWAIT)、恢復(fù)等標(biāo)志。在阻塞、非阻塞情況下返回的錯(cuò)誤情況與其他 SystemV IPC相同。 ? semop函數(shù)由內(nèi)核保證原子的執(zhí)行,內(nèi)核或者完成所有操作,或者什么也不做。 ? semop操作的具體描述: – 如果 sem_op是正數(shù),其值就加到 semval(信號(hào)燈的當(dāng)前值 )上,這對(duì)應(yīng)于釋放由某個(gè)信號(hào)燈控制的資源。如果指定了 SEM_UNDO標(biāo)志,就從相應(yīng)信號(hào)燈的 semadj值中減掉 sem_op的值。 – 如果 sem_op是 0,那么調(diào)用者希望等待到 semval變?yōu)?0,如果 semval已經(jīng)是 0,則立即返回;如果 semval不為 0,相應(yīng)信號(hào)燈的 semzt(等待 semval變?yōu)?0的線(xiàn)程數(shù) )值就加 1,調(diào)用線(xiàn)程阻塞到 semval變?yōu)?0(那時(shí)semzt再減 1)。若指定了 IPC_NOWAIT,則調(diào)用線(xiàn)程不會(huì)睡眠,返回 EAGAIN。 – 如果 sem_op是負(fù)數(shù),那么調(diào)用者希望等待 semval變?yōu)榇笥诨虻扔?sem_op的絕對(duì)值,這對(duì)應(yīng)于分配資源。如果 semval大于或等于 sem_op的絕對(duì)值,則從 semval中減掉 sem_op的絕對(duì)值,如果指定了 SEM_UNDO,那么 sem_op的絕對(duì)值就加到相應(yīng)信號(hào)燈的 semadj值上。如果 semval小于 sem_op的絕對(duì)值,相應(yīng)信號(hào)燈的semnt值就加 1,調(diào)用線(xiàn)程阻塞直到 semval變?yōu)榇笥诨虻扔?sem_op的絕對(duì)值。若指定了 IPC_NOWAIT,則調(diào)用線(xiàn)程不會(huì)睡眠,返回 EAGAIN。 ? semadj稱(chēng)為指定信號(hào)燈針對(duì)調(diào)用進(jìn)程的調(diào)整值。當(dāng)調(diào)用進(jìn)程終止時(shí), semadj的值就加到相應(yīng)信號(hào)燈的 semval上。若調(diào)用進(jìn)程對(duì)某個(gè)信號(hào)燈的全部操作都指定 SEM_UNDO標(biāo)志,則該進(jìn)程終止時(shí),該信號(hào)燈的值就會(huì)變得像根本沒(méi)有運(yùn)行過(guò)該進(jìn)程一樣,這就是復(fù)舊 (undo)的本意。 Linux 培 訓(xùn) semop的調(diào)用問(wèn)題 ? semop采用復(fù)雜的信號(hào)燈集做參數(shù) ,因此造成程序調(diào)用變得復(fù)雜 . ? 信號(hào)燈的值加 1,或值減 1都在 semop完成 ,相當(dāng)于加鎖或解鎖都是有一個(gè)函數(shù)完成 ,這也是與其它互質(zhì)量等其它同步機(jī)制不一樣的地方 ? 一般是將其封裝成 P,V原語(yǔ)的函數(shù)來(lái)操作 /* 申請(qǐng)資源 ,用 P原語(yǔ) */ int semaphore_wait_p(int sem_id) { struct sembuf sb。 = 0。 = 1。 = SEM_UNDO。 if (semop(sem_id, sb, 1) == 1) { fprintf(stderr, semaphore_p failed\n)。 return (1)。 } return 0。 } /* 釋放或分配資源用,用 V原語(yǔ) */ int semaphore_signal_v(int sem_id) { struct sembuf sb。 = 0。 = 1。 = SEM_UNDO。 if (semop(sem_id, sb, 1) == 1) { fprintf(stderr, semaphore_v failed\n)。 return (1)。 } return 0。 } Linux 培 訓(xùn) semctl函數(shù) ? include sys/ ? int semctl(int semid, int semnum, int cmd, …/* union arg */)。 ? 返回:成功時(shí)為非負(fù)值,出錯(cuò)時(shí)為 1 ? 對(duì)一個(gè)信號(hào)燈執(zhí)行各種控制操作。 ? semnum標(biāo)識(shí)某個(gè)信號(hào)燈, semnum僅僅用于 GETVAL、 SETVAL、GETNCNT、 GETZCNT和 GETPID命令。 ? 第四個(gè)參數(shù)是可選的,它依賴(lài)于第三個(gè)參數(shù) cmd。它是一個(gè)聯(lián)合: – union semun { – int val。 /* used for SETVAL only */ – struct semid_ds *buf。 /* used fro IPC_SET and IPC_STAT */ – ushort *array。 /* used for GETALL and SETALL */ – }。 ? 該聯(lián)合沒(méi)有出現(xiàn)在任何系統(tǒng)頭文件中,由應(yīng)用程序聲明。而且它是以值傳遞的,而不是以引用傳遞的。 Linux 培 訓(xùn) semop命令選項(xiàng) ? GETVAL:把 semval的當(dāng)前值作為函數(shù)返回值返回。 ? SETVAL:把 semval設(shè)置為 。如果操作成功,那么相應(yīng)信號(hào)燈在所在進(jìn)程中的調(diào)整值 (semadj)將被置為 0。 ? GETPID:把 sempid的當(dāng)前值作為函數(shù)值返回。 ? GETNCNT:把 semnt的當(dāng)前值作為函數(shù)值返回。 ? GETZCNT:把 semzt的當(dāng)前值作為函數(shù)值返回。 ? GETALL:返回所指定信號(hào)燈集的每個(gè)成員的 semval值。這些值通過(guò)。函數(shù)本身返回值為 0。注意,調(diào)用者必須分配足夠容納所指定信號(hào)燈集中所有成員的 semval值的一個(gè) unsigned short整數(shù)數(shù)組,然后把 。 ? SETALL:設(shè)置所指定信號(hào)燈集中每個(gè)成員的 semval值。這些值通過(guò)。 ? IPC_RMID:把由 semid指定的信號(hào)燈集從系統(tǒng)中刪除。 ? IPC_SET:設(shè)置 semid_ds結(jié)構(gòu)中的以下三個(gè)成員: 、 。這些值來(lái)自由 構(gòu)中相應(yīng)成員。 semid_ds中的 sem_ctime成員也被設(shè)置為當(dāng)前值。 ? IPC_STAT:通過(guò) semid_ds結(jié)構(gòu)。注意,調(diào)用者必須首先分配一個(gè) semid_ds結(jié)構(gòu),并把 。 Company name Linux 培 訓(xùn) 主講人:肖勇軍 桂 電 嵌入式交流群 :156619189 Linux 培 訓(xùn) 共享內(nèi)存數(shù)據(jù)表示 ? 對(duì)于每個(gè) System V共享內(nèi)存區(qū),內(nèi)核維護(hù)如下的信息結(jié)構(gòu): – struct shmid_ds { – struct ipc_perm shm_perm。 /* operation
點(diǎn)擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1