程序間通訊 訊號量

2021-09-25 17:48:49 字數 1064 閱讀 3051

1、訊號量:特殊的變數,用來同步程序。

核心訊號量類似於自旋鎖,因為當鎖關閉著時,它不允許核心控制路徑繼續進行。然而,當核心控制路徑試圖獲取核心訊號量鎖保護的忙資源時,相應的程序就被掛起。只有在資源被釋放時,程序才再次變為可執行。

只有可以睡眠的函式才能獲取核心訊號量;中斷處理程式和可延遲函式都不能使用核心訊號量。

原子減一(p操作,代表獲取資源)

原子加一(v操作,代表釋放資源)

想要了解訊號量就得知道臨界資源和臨界區的概念

臨界資源:同一時刻只允許乙個程序(執行緒)訪問的資源。

臨界區:訪問臨界資源的**段。

訊號量分為兩種:

二值訊號量:值取0和1

計數訊號量:值可以大於1

2、訊號量的函式

int semget(key_t key, int nsems, int sem***);建立訊號量

int semctl(int semid, int semnum, int cmd, ...);對訊號量進行控制

int semop(int semid, struct sembuf *sops, unsigned nsops); 改變訊號量的值(p,v操作)

int semtimedop(int semid, struct sembuf *sops, unsigned nsops,struct timespec *timeout);

3、具體例項

#include#include#include#include"sem.h"

static int semid = -1;

void sem_init()

}else

}}void sem_p()

}void sem_v()

}void sem_destroy()

}

程序間通訊 訊號量

ipc識別符號和關鍵字 在終端輸入ipcs,可以看到目前系統中所有的ipc資訊 第一列的key就是ipc的關鍵字,第二列是ipc的識別符號。ftok 函式用於獲得乙個ipc的關鍵字,其函式原型是 key t ftok const char pathname,int proj id 下面是乙個訊號量的...

程序間通訊 訊號量

system ipc中,對於每乙個新建的訊號量 訊息佇列 共享記憶體,都有乙個在整個系統中唯一的識別符號。每個標識也都有唯一對應的關鍵字,關鍵字的資料型別為ket t 在終端輸入命令 ipcs 可以看到目前系統中所有的ipc資訊 共享記憶體段 鍵 shmid 擁有者 許可權 位元組 nattch 狀...

程序間通訊 訊號量

訊號量不是ipc 機構,它只是乙個計數器用於不同程序之間或同一程序不同執行緒之間的同步,型別 二元訊號 值為0或 1,1說明有可用資源,0說明此時資源占用,其他程序需等待。計數訊號量 表示可用資源數量。計數訊號量集 由乙個或多個訊號量組成的集合,每乙個都是計數訊號量。訊號量資料結構 include ...