QSemaphore Class Reference
[QtCore module]

该类提供一个一般的可数的信号。
#include
注意:这里所有的函数都是线程安全的
公共函数:

QSemaphore
  ( int   n   = 0 )
 
~QSemaphore   ()
void
acquire   ( int   n   = 1 )
int
available   () const
void
release   ( int   n   = 1 )
bool
tryAcquire   ( int   n   = 1 )
bool
tryAcquire   ( int   n , int   timeout   )
详细描述:
一个semaphore是一个mutex的一般化。当一个mutex只能被锁一次,而可能获得一个semaphore多次。Semaphore是典型的被用来保护一定数目的资源。
Semaphore支持两个基本属性,acquire()和release()
Acquiren)视图获得n资源。如果没有这些资源,他将堵塞。
Releasen)释放n资源。
也有一个tryAcquire()函数,立即返回,如果他不能获得资源。一个available()函数,返回可得资源的数目。
QSemaphore sem(5);      // sem.available() == 5
       

     
       
     
 sem.acquire(3);         // sem.available() == 2
       
 sem.acquire(2);         // sem.available() == 0
       
 sem.release(5);         // sem.available() == 5
       
 sem.release(5);         // sem.available() == 10
       

     
       
     
 sem.tryAcquire(1);      // sem.available() == 9, returns true
       
 sem.tryAcquire(250);    // sem.available() == 9, returns false
       
一个典型的semaphore应用是为了控制进入一个循环共享buf,被一个生产者线程和一个消费者线程。Semaphore例子展示怎样使用QSemaphore来解决问题。
一个非计算的semaphore例子就像在一个餐馆吃饭。一个semaphore和一些椅子被初始化。当人们到达,他们想要一个座位。当座位被占,available()是减少。当人们离开,available()增加。如果10人中想坐,但是只有9个座位,那么他们要等。而另一波4人将坐,那么available变成5,使10人等的更长。
成员函数文件:

QSemaphore::QSemaphore ( int n = 0 )

创建一个新的semaphore和初始化资源数目。

QSemaphore::~QSemaphore ()

void QSemaphore::acquire ( int n = 1 )

int QSemaphore::available () const

void QSemaphore::release ( int n = 1 )

注意:这个函数也能用来创造资源
QSemaphore sem(5);      // a semaphore that guards 5 resources
       
 sem.acquire(5);         // acquire all 5 resources
       
 sem.release(5);         // release the 5 resources
       
 sem.release(10);        // "create" 10 new resources
       

bool QSemaphore::tryAcquire ( int n = 1 )

QSemaphore sem(5);      // sem.available() == 5
       
 sem.tryAcquire(250);    // sem.available() == 5, returns false
       
 sem.tryAcquire(3);      // sem.available() == 2, returns true
       

bool QSemaphore::tryAcquire ( int n, int timeout )

QSemaphore sem(5);            // sem.available() == 5
       
 sem.tryAcquire(250, 1000);    // sem.available() == 5, waits 1000 milliseconds and returns false
       
 sem.tryAcquire(3, 30000);     // sem.available() == 2, returns true without waiting