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);