Note: This class is not available with the PO_NO_THREAD_CLASSES parse option.
AutoReadLock objects, when used along with a RWLock object, allow Qore programmers to safely acquire and release a read lock, even if exceptions are thrown or return statements are executed in the block where the AutoReadLock object is created. AutoReadLock objects are helper objects that acquire a read lock for the lifetime of the AutoReadLock object. For this reason, it is only appropriate to assign an AutoReadLock object to a local variable, so when the local variable goes out of scope, the AutoReadLock object will be deleted and the read lock will be automatically released.
For example:
our RWLock $rwl(); sub check_error($error) { # note that the read lock is acquired in the AutoReadLock constructor, and # the read lock will be released as soon as the block is exited below. # (with either the throw statement or the return statement) my AutoReadLock $arl($rwl); if ($error) throw "ERROR", "sorry, an error happened"; return "OK"; }
Table 4.726. AutoReadLock Method Overview
Method | Except? | Description |
|---|---|---|
|
| Y | Creates the AutoReadLock object based on the RWLock argument passed and immediately calls RWLock::readLock(). |
Y | Calls RWLock::readUnlock() on the saved RWLock and destroys the AutoReadLock object. | |
Y | Throws an exception; objects of this class cannot be copied. |
Creates the AutoReadLock object based on the RWLock argument passed. The AutoReadLock object immediately calls RWLock::readLock() on the RWLock object passed, and saves it so it can be released when the AutoReadLock object is destroyed.
AutoReadLock::constructor(RWLock $rwlock)
my AutoReadLock $arl($rwlock);
Calls RWLock::readUnlock() on the saved RWLock and destroys the AutoReadLock object.
delete $arl;