程序間通訊之3 訊號量

2021-08-07 03:52:06 字數 1097 閱讀 4023

程序間通訊之3----訊號量

訊號量分為以下三種。

1、system v 訊號量,在核心中維護,可用於程序或執行緒間的同步,常

用於程序的同步。

2、posix 有名訊號量, 

可用於程序或執行緒間的同步, 常用於執行緒。

3、posix 基於記憶體的訊號量,存放在共享記憶體區中,可用於程序或執行緒

間的同步。

為了獲得共享資源程序需要執行下列操作:

(1)測試控制該資源的訊號量。

(2)若訊號量的值為正,則程序可以使用該資源。程序訊號量值減

1,表示它使用了乙個

資源單位。此程序使用完共享資源後對應    

的訊號量會加 1。以便其他程序使用。

(3)若訊號量的值為0,則程序進入休息狀態,直至訊號量值大於

0。程序被喚醒,返回第

(1)步。

函式原型:

#include

#include

#include

int semget(key_t key,int nsems,int flag);

int semop(int semid,struct sembuf *sops,size_t num_sops);

int semctl(int semid, int semnum, int cmd, …);

};引數 nops為sops指向的sembuf結構體陣列的大小。函式 semctl 用來直接控制訊號量資訊。引數 semid 是由 semget 返回的訊號量識別符號。引數 semnum 為集合中訊號量的編號, 當要用到成組的訊號量時,從0開始。一

塞的程序)、 getval(根據semun返回訊號量的值,從0 開始,第乙個訊號量編號

為0)、setval(根據 semun 設定訊號的值,從0開始,第乙個訊號量編號為0)、

getall(獲取所有訊號量的值, 第二個引數為0,將所有訊號的值存入semun.array

中)、setall(將所有 semun.array的值設定到訊號集中,第二個引數為 0)等。

程序間通訊 3 訊號量

目錄 1.前言 2.訊號量 3.訊號量集結構 4.建立訊號量semget 5.改變訊號量值semop 6.控制訊號量semctrl 本文章中所有例子,基於rhel6.5。訊號量是一種用於提供不同程序間或乙個程序間的不同執行緒間進行同步手段的原語,system v訊號量在核心中維護。二值訊號量 其值只...

程序間通訊之訊號量

訊號量的本質是一種資料操作鎖,其本身不具有資料交換的能力,而是通過控制其他的通訊資源 檔案 外部裝置 來實現程序間通訊,它本身只是一種外部資源的標識。訊號量在此過程中負責資料的互斥 同步等功能。當請求乙個訊號量來表示資源時,程序需要讀取訊號量的值來判斷資源是否可用。大於0,資源可以請求,等於0,無資...

程序間通訊之訊號量

訊號量的本質是一種資料操控鎖,它本身不具有資料交換的功能,而是通過來控制其他的通訊資源來實現程序間通訊的,訊號主要負責資料的同步與互斥功能。程序請求乙個使用訊號量來表示的資源時,首先要讀取訊號量的值來判斷資源是否能被使用,若訊號量的值大於0,資源可用,等於0,無資源可用,同時程序會進入睡眠狀態,直到...