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...