11訊號燈集 函式用法

2021-09-23 15:27:30 字數 933 閱讀 5806

1.建立訊號燈集 int semget(key_t key,int nsems,int sem***);

成功時返回訊號燈的id,失敗返回-1

示例 semget(ipc_private,3,0777);

key 和訊息佇列關聯的key ipc_private或ftok

nsems 集合中包含的計數訊號燈的個數

sem*** 標誌位 ipc_creat|0666 ipc_excl(加上它,如果訊號燈已經存在就會出錯且erron 為eexist)

2.控制訊號燈集 int semctl(int semid,int semnum,int cmd,…);

成功返回0,失敗eof

semid 要操作的訊號燈集id

semnum 要操作的集合中的訊號燈編號

cmd 執行的操作 setval (設定訊號燈的值,要用第四個引數) ipc_rmid(刪除訊號的的值,不用第四個引數)

union semun 取決於cmd

第四個引數為共用體型別,需要自己在程式中定義

union semun

示例union semun

union semun myun;

myun.val = 2;

if(semctl(semid,0,setval,myun)<0)

3.訊號燈pv操作 int semop(int semid,struct sembuf *sops,unsigned nsops);

成功返回0;失敗-1

示例 semop(semid,&mysembuf,1);

semid 要操作的訊號燈集id

sops 描述對訊號燈操作的結構體(陣列)

nsops 要操作的訊號燈的個數

結構體陣列的內容必須是連續的,例如由4個元素,但是要操作1和4,要把操作內容存在結構體陣列的0和1中

struct sembuf;

訊號燈執行緒

這裡設定了乙個boolean的值,預設值是false 這裡面有二個執行緒,二個執行緒同時進入到tv 想象為容器 這個容器中 去拿資料!注意這裡有乙個boolean型別的燈!執行緒進去尋找方法!當boolean true的時候,生產表演了 voice!當boolean false的時候!就進去了!然後...

訊號燈與自旋鎖對比。

sem就是乙個睡眠鎖.如果有乙個任務試圖獲得乙個已被持有的訊號量時,訊號量會將其推入等待佇列,然後讓其睡眠。這時處理器獲得自由去執行其它 當持有訊號量的程序將訊號量釋放後,在等待佇列中的乙個任務將被喚醒,從而便可以獲得這個訊號量。訊號量一般在用程序上下文中.它是為了防止多程序同時訪問乙個共享資源 臨...

第10章 Posix訊號燈

三種訊號燈 說明 p v操作 互斥鎖 條件變數和訊號量之間的差別 include for o constants include for mode constants include sem t sem open const char name,int oflag sem t sem open co...