您好,登錄后才能下訂單哦!
信號量:它描述了當前某種資源的數量。它的意圖在于進程間同步,就相當于一個計數器,它本身不具有數據交換的功能,而是通過控制其他通信資源來實現進程間通信。
當一個進程要訪問臨界資源時,先要進行P操作申請資源,當大于0時,資源可以請求,申請過后,若為0,則將進程掛起;當進程不再訪問該信號量控制的資源時,進行V操作,若有進程掛起,則喚醒該等待的進程繼續恢復訪問,如果無掛起進程,就給它加1。
進程間同步:對臨界資源的訪問帶有順序性的,一個執行完畢,另一個才可以執行。
注意:對信號量的操作均為原子操作,因為信號量的主要作用就是維護資源的互斥或多進程的同步訪問,而在信號量的初始化和創建中均不能保證其原子操作。
創建信號量:semget(key_t key,int nsems,int semflg);
P,V操作:
semop(int semid,struct sembuf* buf,unsigned nsops);//對當前信號量集上的第幾個信號量進行P/V操作
釋放信號量:semctl(int semid ,int semnue,int cmd)//對當前信號量集上的第幾個信號量進行cmd指令操作。
union semun {
int val; // 使用的值
struct semid_ds *buf; // IPC_STAT、IPC_SET 使用緩存區
unsigned short *array; // GETALL,、SETALL 使用的數組
struct seminfo *__buf; // IPC_INFO(Linux特有) 使用緩存區
};
comm.h
comm.c
test.c
運行結果:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。