Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## com.trolltech.qt.gui
Class QReadWriteLock

    java.lang.Object
      com.trolltech.qt.QSignalEmitter
          com.trolltech.qt.QtJambiObject
              com.trolltech.qt.gui.QReadWriteLock

All Implemented Interfaces:
  QtJambiInterface

    public class QReadWriteLock

extends QtJambiObject

The `QReadWriteLock` class provides read-write locking. A read-write lock is a synchronization tool for protecting resources that can be accessed for reading and writing. This type of lock is useful if you want to allow multiple threads to have simultaneous read-only access, but as soon as one thread wants to write to the resource, all other threads must be blocked until the writing is complete.

In many cases, `QReadWriteLock` is a direct competitor to `QMutex`. `QReadWriteLock` is a good choice if there are many concurrent reads and writing occurs infrequently.

Example:

            QReadWriteLock lock = new QReadWriteLock();

            public void readerFunction() {
                // ...
                lock.lockForRead();
                read_file();
                lock.unlock();
                // ...
            }

            public void writerFunction() {
                // ...
                lock.lockForWrite();
                write_file();
                lock.unlock();
                // ...
            }

To ensure that writers aren't blocked forever by readers, readers attempting to obtain a lock will not succeed if there is a blocked writer waiting for access, even if the lock is currently only accessed by other readers. Also, if the lock is accessed by a writer and another writer comes in, that writer will have priority over any readers that might also be waiting.

Like `QMutex`, a `QReadWriteLock` can be recursively locked by the same thread when constructed in `QReadWriteLock::RecursionMode` recursive mode}. In such cases, `unlock()` must be called the same number of times `lockForWrite()` or `lockForRead()` was called. Note that the lock type cannot be changed when trying to lock recursively, i.e. it is not possible to lock for reading in a thread that already has locked for writing (and vice versa).

See also:
  QReadLocker, QWriteLocker, `QMutex`, and `QSemaphore`.

Nested Class Summary
`static class` | `QReadWriteLock.RecursionMode` See also. QReadWriteLock().

Nested classes/interfaces inherited from class com.trolltech.qt.QSignalEmitter
`QSignalEmitter.Signal0, QSignalEmitter.Signal1, QSignalEmitter.Signal2, QSignalEmitter.Signal3, QSignalEmitter.Signal4, QSignalEmitter.Signal5, QSignalEmitter.Signal6, QSignalEmitter.Signal7, QSignalEmitter.Signal8, QSignalEmitter.Signal9`

Constructor Summary
`QReadWriteLock()` Constructs a `QReadWriteLock` object in `NonRecursive` mode.
`QReadWriteLock(QReadWriteLock.RecursionMode recursionMode)` Constructs a `QReadWriteLock` object in the given `recursionMode`.

Method Summary
`static QReadWriteLock` | `fromNativePointer(QNativePointer nativePointer)` This method returns the QReadWriteLock instance pointed to by `nativePointer`.
`void` | `lockForRead()` Locks the lock for reading.
`void` | `lockForWrite()` Locks the lock for writing.
`boolean` | `tryLockForRead()` Attempts to lock for reading.
`boolean` | `tryLockForRead(int timeout)` Attempts to lock for reading.
`boolean` | `tryLockForWrite()` Attempts to lock for writing.
`boolean` | `tryLockForWrite(int timeout)` Attempts to lock for writing.
`void` | `unlock()` Unlocks the lock.

Methods inherited from class com.trolltech.qt.QtJambiObject
`dispose, disposed, equals, finalize, reassignNativeResources, tr, tr, tr`

Methods inherited from class com.trolltech.qt.QSignalEmitter
`blockSignals, disconnect, disconnect, signalsBlocked, signalSender, thread`

Methods inherited from class java.lang.Object
`clone, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Methods inherited from interface com.trolltech.qt.QtJambiInterface
`disableGarbageCollection, nativeId, nativePointer, reenableGarbageCollection, setJavaOwnership`

Constructor Detail

### QReadWriteLock

    public QReadWriteLock()

  Constructs a `QReadWriteLock` object in `NonRecursive` mode.

See also:
  `lockForRead()`, and `lockForWrite()`.

### QReadWriteLock

    public QReadWriteLock(QReadWriteLock.RecursionMode recursionMode)

  Constructs a `QReadWriteLock` object in the given `recursionMode`.

See also:
  `lockForRead()`, `lockForWrite()`, and `RecursionMode` .

Method Detail

### lockForRead

    public final void lockForRead()

  Locks the lock for reading. This function will block the current thread if any thread (including the current) has locked for writing.

See also:
  `unlock()`, `lockForWrite()`, and `tryLockForRead()`.

### lockForWrite

    public final void lockForWrite()

  Locks the lock for writing. This function will block the current thread if another thread has locked for reading or writing.

See also:
  `unlock()`, `lockForRead()`, and `tryLockForWrite()`.

### tryLockForRead

    public final boolean tryLockForRead()

  Attempts to lock for reading. If the lock was obtained, this function returns true, otherwise it returns false instead of waiting for the lock to become available, i.e. it does not block.

  The lock attempt will fail if another thread has locked for writing.

  If the lock was obtained, the lock must be unlocked with `unlock()` before another thread can successfully lock it.

See also:
  `unlock()`, and `lockForRead()`.

### tryLockForRead

    public final boolean tryLockForRead(int timeout)

  Attempts to lock for reading. This function returns true if the lock was obtained; otherwise it returns false. If another thread has locked for writing, this function will wait for at most `timeout` milliseconds for the lock to become available.

  Note: Passing a negative number as the `timeout` is equivalent to calling `lockForRead()`, i.e. this function will wait forever until lock can be locked for reading when `timeout` is negative.

  If the lock was obtained, the lock must be unlocked with `unlock()` before another thread can successfully lock it.

See also:
  `unlock()`, and `lockForRead()`.

### tryLockForWrite

    public final boolean tryLockForWrite()

  Attempts to lock for writing. If the lock was obtained, this function returns true; otherwise, it returns false immediately.

  The lock attempt will fail if another thread has locked for reading or writing.

  If the lock was obtained, the lock must be unlocked with `unlock()` before another thread can successfully lock it.

See also:
  `unlock()`, and `lockForWrite()`.

### tryLockForWrite

    public final boolean tryLockForWrite(int timeout)

  Attempts to lock for writing. This function returns true if the lock was obtained; otherwise it returns false. If another thread has locked for reading or writing, this function will wait for at most `timeout` milliseconds for the lock to become available.

  Note: Passing a negative number as the `timeout` is equivalent to calling `lockForWrite()`, i.e. this function will wait forever until lock can be locked for writing when `timeout` is negative.

  If the lock was obtained, the lock must be unlocked with `unlock()` before another thread can successfully lock it.

See also:
  `unlock()`, and `lockForWrite()`.

### unlock

    public final void unlock()

  Unlocks the lock.

  Attempting to unlock a lock that is not locked is an error, and will result in program termination.

See also:
  `lockForRead()`, `lockForWrite()`, `tryLockForRead()`, and `tryLockForWrite()`.

### fromNativePointer

    public static QReadWriteLock fromNativePointer(QNativePointer nativePointer)

  This method returns the QReadWriteLock instance pointed to by `nativePointer`.

Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD