Linux應用開發(十一):訊號量

來源:互聯網
上載者:User

一、雞肋

     1、訊號量,與其他處理序間通訊方式不同,主要用途是(1)進程互斥(保護臨街資源)(2)進程同步(進程合作)

     2、2值訊號量:訊號量的取值只能是0和1,類似於互斥鎖。這裡說類似,是因為訊號和互斥鎖的區別在於:

        (1)號誌強調共用資源,只要共用資源可用,其他進程同樣可以修改訊號量的值。

        (2)互斥鎖強調進程,佔用資源的進程使用完資源後,必須有本進程來解鎖

     3、計數型訊號量:訊號量的可以取任意非負值

二、訊號量使用(這裡的函數都是基於訊號量集合的,就是往往把一個進程中所有的訊號量看成是一個集合):

     1、建立/開啟 訊號量:int semget(key_t key,int nsems,int semflg);

        (1)參數:

           ==key:   索引值,由ftok獲得

           ==nsems: 指定開啟或者新建立的訊號量集合的訊號量數目

           ==semflg:標識,同訊息佇列

     2、操作 訊號量:int semop(int semid,struct sembuf * sops,unsigned nsops)

         (1)參數:

            ==semid:訊號量集的id

            ==sops:決定將要對訊號量進行的操作,它是一個sembuf結構體類型的數組,(這裡我們用一個結構體類型來指明一種操作)

              struct sembuf{

                 unsigned short sem_num; //指明當前要使用的訊號量屬於訊號量集中的第幾個訊號量

                 short sem_op; //指明要對該訊號量進行的操作名稱

                 short sem_flg;//操作的標誌        

              }

              semflg操作標誌可以取的值:

                  == IPC_NOWAIT:對訊號的操作不能滿足時,semop()不會阻塞,並立即返回,同時設定錯誤資訊

                  ==IPC_UNDO:程式結束時(不論正常還是非正常),釋放訊號量,這樣做的目的在於避免程式在異常情況下結束時未將鎖定資源結束,造成該資源永遠鎖定

            ==nsops,運算元組sops中元素的個數,即它用來指明,有多少個操作要做

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.