|
WebObjects 5.4.2 | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.webobjects.foundation.NSMultiReaderLock
@Deprecated public class NSMultiReaderLock
The NSMultiReaderLock class provides reader and writer locks. The locks are recursive; a single thread can request a lock many times, but a lock is actually taken only on the first request. Likewise, when a thread indicates it's finished with a lock, it takes an equal number of
unlock...
invocations to return the lock.
There's no limit on the number of reader locks that a process can take. However, there can only be one writer lock at a time, and a writer lock is not issued until all reader locks are returned. Reader locks aren't issued to new threads when there is a thread waiting for a writer lock, but threads that already have a reader lock can increment their lock count.
NSMultiReaderLock correctly handles promotion of a reader lock to a writer lock, and the extension of a reader lock to the current writer. This prevents a thread from deadlocking on itself when requesting a combination of lock types.
NSMultiReaderLocks are slightly more time-expensive than NSRecursiveLocks because the recursion count has to be stored per-thread, causing each request for a reader lock to incur at least one hash lookup. Writer locks are even more expensive because NSMultiReaderLock must poll the hashtable until all reader locks have been returned before the writer lock can be taken.
NSRecursiveLock
Field Summary |
---|
Fields inherited from interface com.webobjects.foundation.NSLocking |
---|
OneCentury, OneDay, OneHour, OneMinute, OneSecond, OneWeek, OneYear |
Constructor Summary | |
---|---|
NSMultiReaderLock()
Deprecated. Creates an NSMultiReaderLock object. |
Method Summary | |
---|---|
void |
lock()
Deprecated. Conformance to NSLocking. |
void |
lockForReading()
Deprecated. Acquires a reader lock for the current thread. |
void |
lockForWriting()
Deprecated. Gets a writer lock for the current thread. |
void |
retrieveReaderLocks()
Deprecated. Reinstates the current thread's reader locks that have been suspended using suspendReaderLocks . |
void |
suspendReaderLocks()
Deprecated. Temporarily relinquishes all of the current thread's reader locks, releasing the lock if all reader locks are unlocked. |
String |
toString()
Deprecated. |
boolean |
tryLockForReading()
Deprecated. There are three ways a thread can immediately obtain a reader lock. |
boolean |
tryLockForWriting()
Deprecated. This method implicitly calls lockForWriting , so unlockForWriting must be called if tryLockForWriting returns true . |
void |
unlock()
Deprecated. Conformance to NSLocking. |
void |
unlockForReading()
Deprecated. Releases a reader lock for the current thread. |
void |
unlockForWriting()
Deprecated. Releases a writer lock for the current thread. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Constructor Detail |
---|
public NSMultiReaderLock()
Method Detail |
---|
public void lockForReading()
public void unlockForReading()
lockForReading
message must be paired with an unlockForReading
message before the lock is actually released. Invoking this method when the lock count is zero does nothing.
public void lock()
lock
in interface NSLocking
NSLocking
,
NSMultiReaderLock.lockForWriting()
public void lockForWriting()
public void unlock()
unlockForWriting
.
unlock
in interface NSLocking
NSMultiReaderLock.unlockForWriting()
public void unlockForWriting()
lockForWriting
message must be paired with an unlockForWriting
message before the lock is actually released. When the writer lock is released, it checks to see if the thread previously had any reader locks. If
so, the reader lock count is restored. Invoking this method when the lock count is zero does nothing.
public void suspendReaderLocks()
retrieveReaderLocks
method.
NSMultiReaderLock.retrieveReaderLocks()
public void retrieveReaderLocks()
suspendReaderLocks
.
NSMultiReaderLock.suspendReaderLocks()
public boolean tryLockForWriting()
lockForWriting
, so unlockForWriting
must be called if tryLockForWriting
returns true
.
true
if the current thread is able to immediately obtain a writer lock, else false if another thread already has the lock or is queued to receive itpublic boolean tryLockForReading()
lockForReading
, unlockForReading
must be called if tryLockForReading
returns true
.
true
if the current thread is able to immediately obtain a reader lockpublic String toString()
toString
in class Object
|
Last updated June 2008 | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |