日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

进程间通信之3----信号量

發布時間:2025/3/15 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 进程间通信之3----信号量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
進程間通信之3----信號量

1、信號量


信號量分為以下三種。 1、System V 信號量,在內核中維護,可用于進程或線程間的同步,常 ?? 用于進程的同步。 2、Posix 有名信號量,?可用于進程或線程間的同步, 常用于線程。 3、Posix 基于內存的信號量,存放在共享內存區中,可用于進程或線程間的同步。
為了獲得共享資源進程需要執行下列操作: (1)測試控制該資源的信號量。 (2)若信號量的值為正,則進程可以使用該資源。進程信號量值減 ?????1,表示它使用了一個資源單位。此進程使用完共享資源后對應 ? ? ?????的信號量會加 1。以便其他進程使用。 (3)若信號量的值為0,則進程進入休息狀態,直至信號量值大于 ?????0。進程被喚醒,返回第(1)步。
函數原型: #include <sys/sem.h> #include <sys/ipc.h> #include <sys/types.h> 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, …);
  • 函數semget創建一個信號量集或訪問一個已存在的信號量集。 返回值:成功時,返回一個稱為信號量標識符的整數,semop 和 semctl 會使用它;出錯時,返回-1。
  • 參數 key 是唯一標識一個信號量的關鍵字,如果為 IPC_PRIVATE(值為0,創建一個只有創建者進程才可以訪問的信號量, 通常用于父子進程之間;非0值的key,表示創建一個可以被多個進程共享的信號量。
  • 參數flag是一組標志,還可以與鍵值IPC_CREAT按位或操作,以創建一個新的信號量。也可以通過 IPC_CREAT 和 IPC_EXCL標志的聯合使用確保自己將創建出一個新的獨一無二的信號量。
  • 函數 semop 用于改變信號量對象中各個信號量的狀態。返回值:成功時,返回 0;失敗時,返回-1.參數 semid 是由 semget 返回的信號量標識符。參數sops是指向一個結構體數組的指針。每個數組元素至少包含以下幾個成員:
  • struct sembuf{
    • short sem_num; //操作信號量在信號量集合中的編號, 第一個信號量的編號是 0。
    • short sem_op; //sem_op 成員的值是信號量在一次操作中需要改變的數值。通常只會用到兩個值,一個是-1, 也就是 p 操作,它等待信號量變為可用;一個是+1,也就是 v 操作,它發送信號通知信號量現在可用。
    • short sem_flg; //通常設為:SEM_UNDO,程序結束, 信號量為semop調用前的值。
  • };
  • 參數 nops為sops指向的sembuf結構體數組的大小。函數 semctl 用來直接控制信號量信息。參數 semid 是由 semget 返回的信號量標識符。參數 semnum 為集合中信號量的編號, 當要用到成組的信號量時,從0開始。一般取值為0,表示這是第一個也是唯一的一個信號量。參數cmd為執行的操作。通常為:IPC_RMID(立即刪除信號集,喚醒所有被阻塞的進程)、 GETVAL(根據semun返回信號量的值,從0 開始,第一個信號量編號為0)、SETVAL(根據 semun 設定信號的值,從0開始,第一個信號量編號為0)、GETALL(獲取所有信號量的值, 第二個參數為0,將所有信號的值存入semun.array中)、SETALL(將所有 semun.array的值設定到信號集中,第二個參數為 0)等。

總結

以上是生活随笔為你收集整理的进程间通信之3----信号量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。