您好,登錄后才能下訂單哦!
信號(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
comm.c
test.c
運(yùn)行結(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)容。