QSystemSemaphore使用 簡介

Public Functions

  QSystemSemaphore ( const QString & key, int initialValue = 0, AccessMode mode = Open )
  ~QSystemSemaphore ()
bool acquire ()
SystemSemaphoreError error () const
QString errorString () const
QString key () const
bool release ( int n = 1 )
void setKey ( const QString & key, int initialValue = 0, AccessMode mode = Open )

 

<一>簡介

     QSystemSemaphore類提供了一個通用具備計數功能的系統信號量。ui

       信號量是一個泛化的互斥鎖。而一個互斥鎖能夠鎖只有一次,一個信號量能夠屢次獲取使用。一般,一個信號量是用來保護必定數量相同的資源。spa

       像輕量級的計數信號量QSemaphore同樣,QSystemSemaphore也能夠從多個線程訪問。線程

       與QSemaphore不一樣的是,QSystemSemaphore也能夠從多個進程訪問。code

       這意味着QSystemSemaphore是一個更重量級的類,因此若是你的應用程序不須要在多個進程訪問你的信號量,您將可能只須要使用QSemaphore。進程

       信號支持兩個基本操做,acquire() and release()。資源

       acquire()嘗試去獲取一個資源。若是沒有可用的資源,這個調用將會一直阻塞着,一直等到它有可用資源。而後這個資源會被獲取,這個調用纔會返回。it

       release() 釋放一個資源,這樣它才能夠被其餘進程獲取到。並且release(),能夠同時釋放多個資源。release(n). n>1.io

       一個QSystemSemaphore系統信號量經過建立一個字符關鍵字,讓其餘進程能夠使用相同的信號量。table

<二>代碼例子class

       Example1: Create a system semaphore

QSystemSemaphore sem("market", 3, QSystemSemaphore::Create);  
                                 // resources available == 3  
    sem.acquire();               // resources available == 2  
    sem.acquire();               // resources available == 1  
    sem.acquire();               // resources available == 0  
    sem.release();               // resources available == 1  
    sem.release(2);              // resources available == 3

     Example2: Open a system semaphoreQSystemSemaphore

QSystemSemaphore sem("market", 3, QSystemSemaphore::Open);
相關文章
相關標籤/搜索