Geogram  Version 1.9.1
A programming library of geometric algorithms
GEO::Process::CompactSpinLockArray Class Reference

An array of light-weight synchronisation primitives (spinlocks). More...

#include <geogram/basic/thread_sync.h>

Public Member Functions

 CompactSpinLockArray ()
 Constructs a new SpinLockArray of size 0.
 
 CompactSpinLockArray (index_t size_in)
 Constructs a new CompactSpinLockArray of size size_in. More...
 
 ~CompactSpinLockArray ()
 CompactSpinLockArray destructor.
 
 CompactSpinLockArray (const CompactSpinLockArray &rhs)=delete
 Forbids copy.
 
CompactSpinLockArrayoperator= (const CompactSpinLockArray &rhs)=delete
 Forbids copy.
 
void resize (index_t size_in)
 Resizes a CompactSpinLockArray. More...
 
index_t size () const
 Gets the number of spinlocks in this array.
 
void clear ()
 Resets size to 0 and clears all the memory.
 
void acquire_spinlock (index_t i)
 Acquires a spinlock at a given index. More...
 
void release_spinlock (index_t i)
 Releases a spinlock at a given index. More...
 

Detailed Description

An array of light-weight synchronisation primitives (spinlocks).

In this implementation, storage is optimized so that a single bit per spinlock is used. This implementation uses std::atomic<uint32_t>

See also
acquire_spinlock(), release_spinlock()

Definition at line 301 of file thread_sync.h.

Constructor & Destructor Documentation

◆ CompactSpinLockArray()

GEO::Process::CompactSpinLockArray::CompactSpinLockArray ( index_t  size_in)
inline

Constructs a new CompactSpinLockArray of size size_in.

Parameters
[in]size_innumber of spinlocks in the array.

Definition at line 313 of file thread_sync.h.

Member Function Documentation

◆ acquire_spinlock()

void GEO::Process::CompactSpinLockArray::acquire_spinlock ( index_t  i)
inline

Acquires a spinlock at a given index.

Loops until spinlock at index i is available then reserve it.

Parameters
[in]iindex of the spinlock

Definition at line 388 of file thread_sync.h.

◆ release_spinlock()

void GEO::Process::CompactSpinLockArray::release_spinlock ( index_t  i)
inline

Releases a spinlock at a given index.

Makes spinlock at index i available to other threads.

Parameters
[in]iindex of the spinlock

Definition at line 407 of file thread_sync.h.

◆ resize()

void GEO::Process::CompactSpinLockArray::resize ( index_t  size_in)
inline

Resizes a CompactSpinLockArray.

All the spinlocks are reset to 0.

Parameters
[in]size_inThe desired new size.

Definition at line 341 of file thread_sync.h.


The documentation for this class was generated from the following file: