進程間通信_信號量
信號量(有名:信號燈)與其他進程間通信方式不大相同,主要用途是**保護臨界資源**。進程可以根據它判斷是否能夠訪問某些共享資源。除了用於訪問控制外,還可以用於**進程同步**。
分類
二值信號燈:信號燈的取值只能取0或者1,類似於互斥所。但兩者有不同:信號燈強調共享資源,只要共享資源可用,其他進程同樣可以修改信號燈的值;互斥所更加強調進程,佔用資源的進程使用完資源後,必須由進程本身來解鎖。
**計數信號燈:** 信號燈的值可以取任意非負值。
**創建/打開**
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/sem.h>
int semget(key_t key,int nests,int semflg)
**key:**鍵值,由ftok獲得。
**nsems:**指定打開或者新創建的**信號燈集**中將包含含信號燈的數目。
**semflg:**標誌,同消息隊列。
**操作**
int semop(int semid,struct sembuf *sops,unsigned nsops)
**功能:**對信號量進行控制。
**semid:**信號量集的ID。
**sops:**是一個操作數組,表明要進行什麼操作。
**nsops:**sops所指向的數組的元素個數。
**操作**
struct sembuf { unsigned short em_num; short sem_op; short sem_flg; }
sem_flg:信號操作標誌,可能有兩種選擇:
IPC_NOWAIT:對信號操作不能滿足時,semiop()不會阻塞,並立即返回,同時設定錯誤信息。
IPC_UNDO:程序結束時釋放信號量,這樣做的目地在於避免程序在異常情況下結束時未將鎖定的資源解鎖,造成該資源永遠鎖定。
MarkDown編輯器服務器有問題,寫的東西發不上去。