日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

1、信號量


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

總結

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

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