訊號量是作業系統中線程、程序間訪問臨界資源的同步方式。
其有兩個關鍵操作:
p:申請臨界資源,申請成功那麼訊號量-1
v:釋放臨界資源,釋放成功那麼訊號量+1
system v ipc資源包含共享記憶體、訊息佇列、以及訊號量。其關鍵函式如下:
int semget(key_t key,int num_sems,int sem_flags)
key:通過ftok函式獲取的ipc資源的key 唯一指定乙個ipc 訊號量
num_sems:指明訊號量的數目,預設為1
sem_flags:和shm_flag類似 ipc_crete表明不存在ipc資源時建立乙個 同時可以與許可權作 | 運算指明ipc檔案的許可權
返回值:semid 訊號量的id
int semop(int semid,struct *sem_opa,size_t num_sem_ops)
semid:指明需要操作的訊號量
sem_opa:訊號量操作結構體 通常只需要指定 sem_opa.sem_op =1 表示p操作 sem_op=-1表示 v操作
返回值:-1表示操作失敗 0表示操作成功
int semctl(int semid,int sem_num,int command)
semid:指明需要操作的訊號量
sem_num:通常指定為1表示只操作乙個訊號量
command:set_value設定乙個訊號量初始值 ipc_rmid 刪除該訊號量
返回值:-1表示操作失敗 0表示操作成功
【實驗與演示】
通過訊號量+共享記憶體 完成對共享記憶體的互斥寫。
封裝訊號量初始化、刪除、p操作、v操作
int sem_init() //初始化
if(shmid<0)
;int sem_init() //初始化
if(shmid<0)
if(temp!=pre)
cout
if(pre=="quit")
break;
}return 0;
}
程序間通訊IPC 訊號
訊號 訊號是程序間唯一的非同步通訊 1 由硬體檢測產生 sigsegv 段錯誤 2 由終端按鍵產生 sigint ctrl c 3 由軟體本身產生 sigpipe 管道 4 由核心傳送 sigio sigurg 5 由其他程序傳送 kill 收到乙個訊號該怎麼處理 1 忽略該訊號 2 按照預設方式處...
程序間通訊(IPC) 訊號
關於訊號的常用命令 kill l 檢視系統中所有的訊號 需要的標頭檔案 include include 引數原型 int kill pid t pid,int sig pid 要傳送訊息的程序號 sig 訊號 例如 kill pid,signum 返回值 成功返回0 失敗返回 1 需要的標頭檔案 i...
LINUX程序間通訊(IPC) 訊號量
三 demo 父子程序的訊號量 在對於臨界區資源管理的過程中,多個程式同時訪問乙個共享資源經常容易引發一系列問題 如死鎖,結果不唯一等等,使用訊號量,來解決程序或執行緒間共享資源引發的同步問題。讓多個程序通過特殊變數展開互動,乙個程序在某乙個關鍵點上被迫停止執行直至接收到對應的特殊變數值,通過這一措...