程序間通訊之 訊號量

2021-08-09 18:13:42 字數 1340 閱讀 4177

訊號量相當於記錄資源能同時被多少個程序訪問。

訊號量的作用:程序間同步控制。

訊號量有乙個初值,每當有程序申請使用訊號量,就會通過乙個p操作對訊號量進行-1操作,當計數器減到0的時候就說明沒有資源了,其他程序要想訪問就必須等待,當該程序執行完這段工作之後,就會執行v操作,即對訊號量進行+1操作。

標頭檔案:

#include 

#include

#include

訊號量的建立

函式原型:int semget(key_t key, int nsems, int sem***);

其中,key_t一是個標識資料結構唯一的key鍵值,可以給讓核心自動給,也可以自己呼叫ftok函式繫結乙個;nsems是指創造出多少個訊號量,訊號量集。sem***建立訊息佇列的引數,有ipc_creat 和 ipc_excl。

訊號量操作:p(-1)操作,v(+1)操作.

•函式原型:int semop(int semid, struct sembuf *buf, unsigned lenth);

第乙個semid核心物件

第二個引數是陣列名結構體

第三個引數表示同時操作幾個訊號量,陣列大小。

訊號量的刪除

函式原型:int smectl(int semid,int pos,int cmd,/union semun un/)

semid:核心物件。

pos:訊號量陣列中哪乙個訊號,即陣列下標。

cmd:所採取的操作。

union semun un:可有可無。

sem.h

#pragma once

#include

#include

#include

#include

#include

#include

#include

#include

int semid;

union semun

;void sem_get(); //建立或者獲取訊號量

void sem_p(); //p操作

void sem_v(); //v操作

void sem_del(); //刪除

#include "sem.h"

void sem_get()

}}void sem_p()

}void sem_v()

}void sem_del()

}

程序間通訊之訊號量

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

程序間通訊之訊號量

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

程序間通訊之訊號量

訊號量也是三種xsi ipc之一,不過與訊息佇列和共享記憶體不同的是作為臨界資源的訊號量是以另一種臨界資源的計數器的面目出現的。其基本作用機制為,為某種臨界資源設定一定數量的訊號量,當某個程序占用乙份臨界資源時訊號量就減少相應的數值,當訊號量為0時沒有得到臨界資源的程序就暫時性的進入 休眠 狀態,待...