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