主页 | 所有的类 | 主要的类 | 注释的类 | 分组的类 | 函数

QSemaphore类参考

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

#include <qsemaphore.h>

所有成员函数的列表。

公有成员


详细描述

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

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

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

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

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

也可以参考环境类线程类


成员函数文档

QSemaphore::QSemaphore ( int maxcount )

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

QSemaphore::~QSemaphore () [虚]

销毁这个信号量。

int QSemaphore::available () const

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

int QSemaphore::operator++ ( int )

后置++操作符。

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

int QSemaphore::operator+= ( int n )

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

int QSemaphore::operator-- ( int )

后置--操作符。

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

int QSemaphore::operator-= ( int n )

释放信号量的n个访问。

int QSemaphore::total () const

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

bool QSemaphore::tryAccess ( int n )

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

这个文件是Qt工具包一部分。 版权所有 © 1995-2002 Trolltech。保留所有权利。


Copyright © 2002 Trolltech Trademarks 译者:Cavendish
Qt 3.0.5版