RWLock
Added in version 2.32.
- class RWLock(*args, **kwargs)
- Constructors:
RWLock()
Methods
- class RWLock
- clear() None
Frees the resources allocated to a lock with
init()
.This function should not be used with a
RWLock
that has been statically allocated.Calling
clear()
when any thread holds the lock leads to undefined behaviour.Added in version 2.32.
- init() None
Initializes a
RWLock
so that it can be used.This function is useful to initialize a lock that has been allocated on the stack, or as part of a larger structure. It is not necessary to initialise a reader-writer lock that has been statically allocated.
typedef struct { GRWLock l; ... } Blob; Blob *b; b = g_new (Blob, 1); g_rw_lock_init (&b->l);
To undo the effect of
init()
when a lock is no longer needed, useclear()
.Calling
init()
on an already initializedRWLock
leads to undefined behaviour.Added in version 2.32.
- reader_lock() None
Obtain a read lock on
rw_lock
. If another thread currently holds the write lock onrw_lock
, the current thread will block until the write lock was (held and) released. If another thread does not hold the write lock, but is waiting for it, it is implementation defined whether the reader or writer will block. Read locks can be taken recursively.Calling
reader_lock()
while the current thread already owns a write lock leads to undefined behaviour. Read locks however can be taken recursively, in which case you need to make sure to callreader_unlock()
the same amount of times.It is implementation-defined how many read locks are allowed to be held on the same lock simultaneously. If the limit is hit, or if a deadlock is detected, a critical warning will be emitted.
Added in version 2.32.
- reader_trylock() bool
Tries to obtain a read lock on
rw_lock
and returnsTrue
if the read lock was successfully obtained. Otherwise it returnsFalse
.Added in version 2.32.
- reader_unlock() None
Release a read lock on
rw_lock
.Calling
reader_unlock()
on a lock that is not held by the current thread leads to undefined behaviour.Added in version 2.32.
- writer_lock() None
Obtain a write lock on
rw_lock
. If another thread currently holds a read or write lock onrw_lock
, the current thread will block until all other threads have dropped their locks onrw_lock
.Calling
writer_lock()
while the current thread already owns a read or write lock onrw_lock
leads to undefined behaviour.Added in version 2.32.
- writer_trylock() bool
Tries to obtain a write lock on
rw_lock
. If another thread currently holds a read or write lock onrw_lock
, it immediately returnsFalse
. Otherwise it locksrw_lock
and returnsTrue
.Added in version 2.32.
- writer_unlock() None
Release a write lock on
rw_lock
.Calling
writer_unlock()
on a lock that is not held by the current thread leads to undefined behaviour.Added in version 2.32.