Home · All Classes · Modules · QSS HELP · QSS 案例 · VER007 HOME |
该QReadWriteLock类提供的读写锁。More...
该QReadWriteLock类提供的读写锁。
读写锁是一个同步工具,用于保护可用于读取和写入访问的资源。如果你想允许多个线程同时有只读访问这个类型的锁是有用的,但只要有一个线程要写入的资源,所有其它线程必须被阻止,直到写入完成。
在许多情况下, QReadWriteLock是一个直接竞争者QMutex。 QReadWriteLock是一个不错的选择,如果有许多并发读取和写入发生很少。
例如:
QReadWriteLock lock; void ReaderThread.run() { ... lock.lockForRead(); read_file(); lock.unlock(); ... } void WriterThread.run() { ... lock.lockForWrite(); write_file(); lock.unlock(); ... }
以确保作家不是由读者永远阻塞,读者试图获取锁不会如果有阻塞作家等待访问,即使锁定目前仅由其它读者访问成功。此外,如果该锁由一个作家访问和另一位作家进来,那笔者将优先于该也可能会等待任何读者。
喜欢QMutex,一个QReadWriteLock可以在构建时被递归锁定由同一个线程QReadWriteLock.RecursionMode。在这种情况下,unlock( )必须被调用的次数相同lockForWrite()或lockForRead( )被调用。需要注意的是试图以递归方式锁定,也就是说,它是不可能的读锁,在已经锁定写(反之亦然)一个线程,当锁定类型不能改变。
Constant | Value | Description |
---|---|---|
QReadWriteLock.Recursive | 1 | 在这种模式下,一个线程可以锁定同一QReadWriteLock多次与互斥不会被解锁,直到相应数量的unlock( )的调用而制定的。 |
QReadWriteLock.NonRecursive | 0 | 在这种模式下,一个线程可能仅锁定QReadWriteLock一次。 |
这个枚举被引入或修改的Qt 4.4 。
See also QReadWriteLock( ) 。
构造一个QReadWriteLock在对象NonRecursive模式。
See also lockForRead()和lockForWrite( ) 。
构造一个QReadWriteLock在给定的对象recursionMode。
此功能被引入Qt的4.4 。
See also lockForRead( )lockForWrite()和RecursionMode。
锁读锁。此函数将阻塞当前线程,如果任何线程(包括当前)已锁定用于写入。
See also unlock( )lockForWrite()和tryLockForRead( ) 。
锁写锁。此函数将阻塞当前线程,如果另一个线程已锁定读取或写入。
See also unlock( )lockForRead()和tryLockForWrite( ) 。
尝试读锁。如果获得了锁,这个函数返回True ,否则返回,而不是等待该锁虚假变得可用,也就是说,它不会阻塞。
如果另一个线程已锁定用于写入的锁定尝试将会失败。
如果获得了锁,该锁必须被解锁unlock( )之前,另一个线程可以成功地将其锁定。
See also unlock()和lockForRead( ) 。
这是一个重载函数。
尝试读锁。如果获得了锁这个函数返回True,否则返回False 。如果另一个线程已锁定的文笔,这个函数将等待最多timeout毫秒为锁变得可用。
注意:传递一个负数作为timeout相当于调用lockForRead( ) ,即该函数将一直等待,直到锁可以锁定读数时timeout是负的。
如果获得了锁,该锁必须被解锁unlock( )之前,另一个线程可以成功地将其锁定。
See also unlock()和lockForRead( ) 。
尝试写锁。如果获得了锁,则该函数返回True,否则,它会立即返回False 。
如果另一个线程已锁定用于读取或写入锁定的尝试将会失败。
如果获得了锁,该锁必须被解锁unlock( )之前,另一个线程可以成功地将其锁定。
See also unlock()和lockForWrite( ) 。
这是一个重载函数。
尝试写锁。如果获得了锁这个函数返回True,否则返回False 。如果另一个线程已锁定用于读取或写入时,此功能会等待最多timeout毫秒为锁变得可用。
注意:传递一个负数作为timeout相当于调用lockForWrite( ) ,即该函数将一直等待,直到锁可以锁定写入时timeout是负的。
如果获得了锁,该锁必须被解锁unlock( )之前,另一个线程可以成功地将其锁定。
See also unlock()和lockForWrite( ) 。
解除锁定。
试图解锁未锁定的锁是一个错误,将导致程序终止。
See also lockForRead( )lockForWrite( )tryLockForRead()和tryLockForWrite( ) 。
PyQt 4.10.3 for X11 | Copyright © Riverbank Computing Ltd and Nokia 2012 | Qt 4.8.5 |