QSystemSemaphore使用 简介

本文介绍了QSystemSemaphore类,这是一个具备计数功能的系统信号量,可在多个进程间共享。文章对比了QSystemSemaphore与QSemaphore的区别,并提供了创建及打开信号量的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Public Functions

 QSystemSemaphore ( const QString & key, int initialValue = 0, AccessMode mode = Open )
 ~QSystemSemaphore ()
boolacquire ()
SystemSemaphoreErrorerror () const
QStringerrorString () const
QStringkey () const
boolrelease ( int n = 1 )
voidsetKey ( 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);  

 

转载于:https://my.oschina.net/u/2515635/blog/735574

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值