返回介绍

QSemaphore类

发布于 2019-10-04 15:02:29 字数 2152 浏览 875 评论 0 收藏 0

QSemaphore类提供了强壮的整数信号量。 详情请见……

#include <qsemaphore.h>

所有成员函数的列表。

公有成员

  • QSemaphore ( intmaxcount )
  • virtual ~QSemaphore ()
  • int available () const
  • int total () const
  • int operator++ ( int )
  • int operator-- ( int )
  • int operator+= ( intn )
  • int operator-= ( intn )
  • bool tryAccess ( intn )

详细描述

QSemaphore类提供了强壮的整数信号量。

QSemaphore也可以被用来使线程的执行顺序化,和QMutex的方法相似。信号量和互斥量的不同在于,信号量可以在同一时间被多于一个的线程访问。

例如,假设我们有一个应用程序把数据存储到一个大的树型结构中。应用程序创建了10个线程(通常被称作线程池)来执行树中的搜索。当应用程序搜索树中的一小片数据,它在每个基本节点上使用一个线程来执行搜索。一个信号量就可以用来确保两个线程不必在同一时间内试图对树的同一个分支进行搜索。

一个信号量的非计算实例是在餐馆就餐。信号量被初始化为最大值等于餐馆内的椅子数。当人们来了,他们想要一个座位。当座位满了,信号量就被访问,每次一个人。当人们离开了,访问就被释放,允许更多的人进入。如果一个10人的聚会想坐下,但是这里只有9个座位,那么这10个人就必须等,但是一个4人的聚会就可以坐下了(剩下的座位就是5了,那么那10个人就得等更长的时间了)。

当信号量被创建时,它被给定为一个它所允许的同时访问的最大数值。这个数量可以使用operator++()、operator--()、operator+=()和operator-=()来改变。允许访问的数字可以使用available()重新得到,并且总量可以通过total()得到。注意如果没有足够多的可使用的访问,增加函数将会阻塞。如果你需要得到不阻塞的访问,请使用tryAccess()。

也可以参考环境类和线程类。


成员函数文档

QSemaphore::QSemaphore ( intmaxcount )

创建一个新的信号量。这个信号量可以同时被最多maxcount次访问。

QSemaphore::~QSemaphore () [虚]

销毁这个信号量。

int QSemaphore::available () const

这个函数返回信号量当前可使用的访问的数量。

int QSemaphore::operator++ ( int )

后置++操作符。

试图得到信号量的访问。如果available() == 0,这个调用将会阻塞,一直到它能够得到访问,比如直到available() > 0。

int QSemaphore::operator+= ( intn )

试图得到信号量的访问。如果available() < n,这个调用将会阻塞,一直到它能够得到访问,比如直到available() >= n

int QSemaphore::operator-- ( int )

后置--操作符。

释放信号量的访问。这将会唤醒所有等待访问这个信号量的线程。

int QSemaphore::operator-= ( intn )

释放信号量的n个访问。

int QSemaphore::total () const

这个函数返回信号量的最大访问数。

bool QSemaphore::tryAccess ( intn )

试图得到信号量的访问。如果available() < n,这个函数会立即返回假。如果If available() >= n,这个函数会得到n个访问并且返回真。这个函数是阻塞的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文