主页 | 所有的类 | 主要的类 | 注释的类 | 分组的类 | 函数 |
QMutex类提供的是线程之间的访问顺序化。 详情请见……
#include <qmutex.h>
QMutex的目的是保护一个对象、数据结构或者代码段,所以同一时间只有一个线程可以访问它。(在Java术语中,它和同步关键字“synchronized”很相似)。例如,这里有一个方法打印给用户两条消息:
void someMethod() { qDebug("Hello"); qDebug("World"); }
如果同时在两个线程中调用这个方法,结果的顺序将是:
Hello Hello World World
如果你使用了一个互斥量:
QMutex mutex; void someMethod() { mutex.lock(); qDebug("Hello"); qDebug("World"); mutex.unlock(); }
用Java的术语,这段代码应该是:
void someMethod() { synchronized { qDebug("Hello"); qDebug("World"); } }
然后同一时间只有一个线程可以运行someMethod并且消息的顺序也一直是正确的。当然,这只是一个很简单的例子,但是它适用于任何需要按特定频率发生的情况。
但你在一个线程中调用lock(),其它线程将会在同一地点试图调用lock()来阻塞,知道这个线程调用unlock()之后其它线程才会获得这个锁。lock()的一种非阻塞选择是tryLock()。
警告:由于不同平台上递归互斥量的实现不同,所以从以前锁定这个互斥量的同一个线程上调用这个函数可能会返回未定义的结果。
在另一个线程可以成功锁定它之前,这个锁必须被调用unlock()来解锁。
也可以参考lock()、unlock()和locked()。
这个文件是Qt工具包一部分。 版权所有 © 1995-2002 Trolltech。保留所有权利。
Copyright © 2002 Trolltech | Trademarks | 译者:Cavendish | Qt 3.0.5版
|