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类提供了一个通用具有计数功能的系统信号量。
信号量是一个泛化的互斥锁。而一个互斥锁可以锁只有一次,一个信号量可以多次获取使用。通常,一个信号量是用来保护一定数量相同的资源。
像轻量级的计数信号量QSemaphore一样,QSystemSemaphore也可以从多个线程访问。
与QSemaphore不同的是,QSystemSemaphore也可以从多个进程访问。
这意味着QSystemSemaphore是一个更重量级的类,所以如果你的应用程序不需要在多个进程访问你的信号量,您将可能只需要使用QSemaphore。
信号支持两个基本操作,acquire() and release()。
acquire()尝试去获取一个资源。如果没有可用的资源,这个调用将会一直阻塞着,一直等到它有可用资源。然后这个资源会被获取,这个调用才会返回。
release() 释放一个资源,这样它才可以被其他进程获取到。而且release(),可以同时释放多个资源。release(n). n>1.
一个QSystemSemaphore系统信号量通过创建一个字符关键字,让其他进程可以使用相同的信号量。
<二>代码例子
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);