org.garret.perst
Interface IResource
- All Known Subinterfaces:
- BitIndex, Blob, FieldIndex, GenericIndex, Index, IPersistentSet, PatriciaTrie, SortedCollection, SpatialIndex, SpatialIndexR2, TimeSeries
- All Known Implementing Classes:
- PersistentResource
- public interface IResource
Interface of object supporting locking
|
Method Summary |
void |
exclusiveLock()
Lock persistent object in exclusive mode. |
boolean |
exclusiveLock(long timeout)
Lock persistent object in exclusive mode. |
void |
reset()
Reset resource to original state.
|
void |
sharedLock()
Lock persistent object in shared mode. |
boolean |
sharedLock(long timeout)
Lock persistent object in shared mode. |
void |
unlock()
Remove granted lock. |
exclusiveLock
public void exclusiveLock()
- Lock persistent object in exclusive mode. Only one thread can lock object in exclusive mode at each
moment of time. Shared or exclusive lock requests of other threads will be blocked until
this lock is released.
shared locks on this objects, but not exclusive lock can be set until this lock is released.
This lock is reentrant, so thread owning the lock can successfully retrieve the lock many times
(and correspondent number of unlocks is needed to release the lock).
Locking the object doesn't prevent other threads from accessing the object -
it only has influence on sharedLock and exclusiveLock methods.
So programmer should set proper lock before accessing the object in multithreaded application.
Only persistent object (object which were assigned to the the storage either implicitly by
saving some other persistent object referencing this object, either explicitly by
Storage.makeObjectPersistent method.
exclusiveLock
public boolean exclusiveLock(long timeout)
- Lock persistent object in exclusive mode. Only one thread can lock object in exclusive mode at each
moment of time. Shared or exclusive lock requests of other threads will be blocked until
this lock is released.
shared locks on this objects, but not exclusive lock can be set until this lock is released.
This lock is reentrant, so thread owning the lock can successfully retrieve the lock many times
(and correspondent number of unlocks is needed to release the lock).
Locking the object doesn't prevent other threads from accessing the object -
it only has influence on sharedLock and exclusiveLock methods.
So programmer should set proper lock before accessing the object in multithreaded application.
Only persistent object (object which were assigned to the the storage either implicitly by
saving some other persistent object referencing this object, either explicitly by
Storage.makeObjectPersistent method.
- Parameters:
timeout - timeout of operation in milliseconds. If timeout is 0 and
lock can not be granted, the request will fail immediately. Otherwise the system will try
to grant lock within specified amount of time.
- Returns:
true if lock is successfully granted
false if lock can not be granted within specified time
reset
public void reset()
- Reset resource to original state.
Wakeup all threads waiting for this resource.
sharedLock
public void sharedLock()
- Lock persistent object in shared mode. Other threads will be able to set their
shared locks on this objects, but not exclusive lock can be set until this lock is released.
Upgrading of the lock is not possible (thread having read lock can not upgrade it to exclusive lock).
It is done to prevent possible deadlocks caused by lock updates.
But locks are reentrant - so thread can request the same lock many times (and correspondent
number of unlocks is needed to release the lock).
Locking the object doesn't prevent other threads from accessing the object -
it only has influence on sharedLock and exclusiveLock methods.
So programmer should set proper lock before accessing the object in multithreaded application.
If object is concurrently accessed by several threads in read-only mode, then explicit locking
of this object is not needed, because language API provides consistent retrieving of objects itself.
Only persistent object (object which were assigned to the the storage either implicitly by
saving some other persistent object referencing this object, either explicitly by
Storage.makeObjectPersistent method.
sharedLock
public boolean sharedLock(long timeout)
- Lock persistent object in shared mode. Other threads will be able to set their
shared locks on this objects, but not exclusive lock can be set until this lock is released.
Upgrading of the lock is not possible (thread having read lock can not upgrade it to exclusive lock).
It is done to prevent possible deadlocks caused by lock updates.
But locks are reentrant - so thread can request the same lock many times (and correspondent
number of unlocks is needed to release the lock).
Locking the object doesn't prevent other threads from accessing the object -
it only has influence on sharedLock and exclusiveLock methods.
So programmer should set proper lock before accessing the object in multithreaded application.
If object is concurrently accessed by several threads in read-only mode, then explicit locking
of this object is not needed, because language API provides consistent retrieving of objects itself.
Only persistent object (object which were assigned to the the storage either implicitly by
saving some other persistent object referencing this object, either explicitly by
Storage.makeObjectPersistent method.
- Parameters:
timeout - timeout of operation in milliseconds. If timeout is 0 and
lock can not be granted, the request will fail immediately. Otherwise the system will try
to grant lock within specified amount of time.
- Returns:
true if lock is successfully granted
false if lock can not be granted within specified time
unlock
public void unlock()
- Remove granted lock. If lock was requested several times by one thread, then correspondent number
of unlocks is needed to release the lock.