About
Locks are used to guard access to resources that are shared across multiple threads.
- Note
- Locks should be used to avoid crashes when seldom used resources are accessed and to protect single threaded operations. Locks should not be used to fix problems of ill-designed code.
- Warning
- Make sure that a thread releases a lock after it has finished or a deadlock will be the result.
Spinlock
maxon::Spinlock implements a mutex that will loop on a pause/idle instruction when it is already locked.
{
}
Py_UCS4 * res
Definition: unicodeobject.h:1113
Definition: spinlock.h:59
void Lock()
Definition: spinlock.h:86
void Unlock()
Definition: spinlock.h:97
ScopedLock
A maxon::ScopedLock acquires a lock when created and releases upon destruction (at the end of the scope).
- Warning
- ScopedLock should only be used for a short block of code. It will block all other threads.
{
return UpdateGlobalData();
}
Definition: spinlock.h:255
#define iferr_scope
Definition: resultbase.h:1384
RWSpinlock
The maxon::RWSpinlock allows access for multiple readers and only one exclusive writer.
{
}
{
}
Py_ssize_t i
Definition: abstract.h:645
Int64 Int
signed 32/64 bit int, size depends on the platform
Definition: apibase.h:188
Definition: spinlock.h:186
ARWLock
The maxon::ARWLock is an asymmetric read write lock which prefers the readers.
{
}
static void Clear()
{
}
{
}
void WriteLock()
Definition: arwlock.h:66
void WriteUnlock()
Definition: arwlock.h:76
return OK
Definition: apibase.h:2690
#define MAXON_INITIALIZATION(...)
Definition: module.h:795
#define DeleteObj(obj)
Definition: newobj.h:159
#define NewObj(T,...)
Definition: newobj.h:108
#define iferr_return
Definition: resultbase.h:1519
Synchronized
The maxon::Synchronized template is used to guarantee safe access to a given variable. It allows access to the variable only after a lock has been acquired. For asymmetric read-write access there is also maxon::RWSynchronized based on maxon::ARWLock.
class SimpleStringClass
{
public:
{
return *_string.Read();
}
{
return _string.Write()->Append(string);
}
{
auto lockedPtr = _string.Write();
{
}
}
private:
};
Definition: string.h:1235
Definition: synchronized.h:48
void * str
Definition: bytesobject.h:77
Serializer
The maxon::Serializer guarantees mutually exclusive access to a shared resource. The given lambdas are enqueued and executed.
- Note
- maxon::Serializer is low level and does not support error handling.
g_serializer.EnqueueAndWait([]()
{
iferr (UpdateGlobalData())
{
}
});
#define DiagnosticOutput(formatString,...)
Definition: debugdiagnostics.h:176
#define iferr(...)
Definition: errorbase.h:388
Further Reading