訊號量互斥,王明學learn

來源:互聯網
上載者:User

標籤:

                       訊號量互斥

  訊號量(又名:號誌)與其他處理序間通訊方式不大相同,主要用途是保護臨界資源(進程互斥)。進程可以根據它判定是否能夠訪問某些共用資源。除了用於存取控制外,還可用於進程同步。

一、訊號量分類

  二值號誌:號誌的值只能取0或1

  計數號誌:號誌的值可以取任意非負值。

二、函數學習

2.1建立/開啟訊號量

2.1.1 函數名       

  semget

2.1.2 函數原形

  int semget(key_t key,int nsems,int semflg);

2.1.3 函數功能

  擷取訊號量集合標示符

  當key所指定的訊號量不存在的時候,並且semflg裡麵包含了IPC_CREAT,這個時候就會建立一個訊號量集合

2.1.4 所屬標頭檔

  <sys/types.h>  <sys/ipc.h>   <sys/sem.h>

2.1.5 傳回值

  成功:返回訊號量集合的表示符

  失敗:-1

2.1.6 參數說明

  key:索引值

  nsems:建立的這個訊號量集合裡麵包含的訊號量數目

  semflg:標誌,可以取IPC_CREAT

2.2指定索引值

   系統建立IPC通訊(處理序間通訊)必須指定一個ID值 。

1.任意指定一個數

  缺點:這個數已經被別的IPC對象(訊息佇列,共用記憶體)所使用了,在與新建立的訊號量關聯時就會失敗。

2. 構造一個盡量不會被別的IPC對象用到的數

  方法:使用key_t ftok( char * fname, int id )

2.2.1 函數名

  ftok

2.2.2 函數原形

  key_t ftok( char * fname, int id )

2.2.3 函數功能

  構造一個盡量不會被別的IPC對象用到的數

2.2.4 所屬標頭檔

  <sys/types.h><sys/ipc.h>

2.2.5 傳回值

  索引值

2.2.6 參數說明

  fname就是指定的檔案名稱(已經存在的檔案名稱)

  id是子序號。雖然是int類型,但是只使用8bits(1-255)。

2.3操作訊號量

2.3.1 函數名

  semop

2.32 函數原形

  int semop(int semid,struct sembuf *sops,unsigned nsops);

2.3.3 函數功能

  操作訊號量集合裡面的訊號量

2.3.4 所屬標頭檔

  <sys/types.h><sys/ipc.h><sys/sem.h>

2.3.5 傳回值

  成功:0

  失敗:-1

2.3.6 參數說明

  int semid:要操作的訊號量集合的標示符

  struct sembuf *sops:要操作多個訊號量

  unsigned nsops:對訊號量執行什麼樣的操作

訊號量互斥,王明學learn

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.