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:1389
 
  
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:202
 
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:69
 
void WriteUnlock()
Definition: arwlock.h:79
 
return OK
Definition: apibase.h:2735
 
#define MAXON_INITIALIZATION(...)
Definition: module.h:875
 
#define DeleteObj(obj)
Definition: newobj.h:159
 
#define NewObj(T,...)
Definition: newobj.h:108
 
#define iferr_return
Definition: resultbase.h:1524
 
  
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:1237
 
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:170
 
#define iferr(...)
Definition: errorbase.h:388
 
  
Further Reading