溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

進(jìn)程間通信-信號(hào)量

發(fā)布時(shí)間:2020-06-19 03:16:07 來源:網(wǎng)絡(luò) 閱讀:323 作者:yayaru9240 欄目:編程語言

信號(hào)量:它描述了當(dāng)前某種資源的數(shù)量。它的意圖在于進(jìn)程間同步,就相當(dāng)于一個(gè)計(jì)數(shù)器,它本身不具有數(shù)據(jù)交換的功能,而是通過控制其他通信資源來實(shí)現(xiàn)進(jìn)程間通信。

當(dāng)一個(gè)進(jìn)程要訪問臨界資源時(shí),先要進(jìn)行P操作申請(qǐng)資源,當(dāng)大于0時(shí),資源可以請(qǐng)求,申請(qǐng)過后,若為0,則將進(jìn)程掛起;當(dāng)進(jìn)程不再訪問該信號(hào)量控制的資源時(shí),進(jìn)行V操作,若有進(jìn)程掛起,則喚醒該等待的進(jìn)程繼續(xù)恢復(fù)訪問,如果無掛起進(jìn)程,就給它加1。

進(jìn)程間同步:對(duì)臨界資源的訪問帶有順序性的,一個(gè)執(zhí)行完畢,另一個(gè)才可以執(zhí)行。

注意:對(duì)信號(hào)量的操作均為原子操作,因?yàn)樾盘?hào)量的主要作用就是維護(hù)資源的互斥或多進(jìn)程的同步訪問,而在信號(hào)量的初始化和創(chuàng)建中均不能保證其原子操作。

創(chuàng)建信號(hào)量:semget(key_t key,int nsems,int semflg);

P,V操作:

semop(int semid,struct sembuf* buf,unsigned nsops);//對(duì)當(dāng)前信號(hào)量集上的第幾個(gè)信號(hào)量進(jìn)行P/V操作

釋放信號(hào)量:semctl(int semid ,int semnue,int cmd)//對(duì)當(dāng)前信號(hào)量集上的第幾個(gè)信號(hào)量進(jìn)行cmd指令操作。

union semun { 

 int val; // 使用的值 

 struct semid_ds *buf; // IPC_STAT、IPC_SET 使用緩存區(qū) 

 unsigned short *array; // GETALL,、SETALL 使用的數(shù)組 

 struct seminfo *__buf; // IPC_INFO(Linux特有) 使用緩存區(qū) 

}; 

comm.h

進(jìn)程間通信-信號(hào)量

comm.c

進(jìn)程間通信-信號(hào)量

進(jìn)程間通信-信號(hào)量

進(jìn)程間通信-信號(hào)量

test.c
進(jìn)程間通信-信號(hào)量

運(yùn)行結(jié)果:

進(jìn)程間通信-信號(hào)量


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI