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为负数,这个函数将永远等待直到资源可用,反之,如果资源一直不可用,函数将一直等待下去。
信号量的一个典型应用场景是:控制对由生产者线程和消费者线程共享的循环缓冲区的访问。下文将描述这个例子

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

被折叠的 条评论
为什么被折叠?



