【Qt】Qt线程同步之QSemaphore信号量

本文介绍了Qt中的QSemaphore信号量,如何通过acquire(), release(), available()等函数实现线程同步,以及在生产者-消费者模型中的应用。通过实例演示了如何使用信号量控制循环缓冲区访问,提升并发性能。
Qt—线程同步之QSemaphore信号量

一、简介

​ 信号量是互斥锁的泛化。一个互斥的对象只能被锁定一次,但是可以多次获取一个信号量。信号量通常用于:保护一定数量的相同资源。


二、成员函数API
(2-1)获取n个资源

​ 调用acquire(n)将尝试获取n个资源。如果没有那么多可用的资源,调用将被阻塞,直到出现可用的资源为止。

void QSemaphore::acquire(int n = 1)
(2-2)释放n个资源

​ 调用release(n)函数释放n个资源。

void QSemaphore::release(int n = 1)
(2-3)获取可用资源的数量

​ 调用available()函数返回可用资源的数量。

int QSemaphore::available() const
(2-4)尝试获取n个资源

​ 调用tryAcquire()函数尝试获取资源,如果不能获取资源,它将立即返回。

bool QSemaphore::tryAcquire(int n = 1)
(2-5)在一段时间内尝试获取n个资源
bool QSemaphore::tryAcquire(int n, int timeout)

​ 尝试获取信号量保护的n个资源,成功获取时将返回true。如果available() < n,这个函数将在超时毫秒时长内等待资源。

​ 注意:如果传递一个负数作为超时参数,就相当于调用acquire()。即如果timeout为负数,这个函数将永远等待直到资源可用,反之,如果资源一直不可用,函数将一直等待下去。

​ 信号量的一个典型应用场景是:控制对由生产者线程和消费者线程共享的循环缓冲区的访问。下文将描述这个例子


三、使用示例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iriczhao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值