Class Lock
Primitive lock objects.
A primitive lock is a synchronization primitive that is not owned by a
particular coroutine when locked
. A primitive lock is in one of two states,
‘locked
’ or ‘unlocked’.
It is created in the unlocked state. It has two basic methods, acquire
() and release
(). When the state is unlocked,
acquire
() changes the state to locked
and returns immediately.
When the state is locked
, acquire
() blocks until a call to
release
() in another coroutine changes it to unlocked, then the
acquire
() call resets it to locked
and returns. The release
() method should only be called in the locked
state; it changes the
state to unlocked and returns immediately. If an attempt is made to release
an unlocked lock, an Exception will be thrown.
When more than one coroutine is blocked in acquire
() waiting for
the state to turn to unlocked, only one coroutine proceeds when a release
() call resets the state to unlocked; first coroutine which is
blocked in acquire
() is being processed.
acquire
() is a coroutine.
This class is not thread safe.
Inherits from
-
Object
(base class)
Properties
Name | Type | Description |
---|---|---|
locked
[get]
|
bool |
Return true if lock is acquired. |
Methods
Name | Description |
---|---|
acquire
|
Acquire a lock. |
release
|
Release a lock. |
Usage
lock = new Lock
();
...
lock.acquire();
scope (exit) lock.release();
...
Lock
objects can be tested for locking state:
if (!lock.locked) lock.acquire(); else; // lock is acquired ...
Authors
Dragos Carp
Copyright
© 2015-2016 Dragos Carp
License
Boost Software License - Version 1.0