Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
Arcane::SpinLock Class Reference

SpinLock. More...

#include </__w/arcaneframework.github.io/arcaneframework.github.io/framework/arccore/src/concurrency/arccore/concurrency/SpinLock.h>

Collaboration diagram for Arcane::SpinLock:

Classes

class  ScopedLock
class  ManualLock

Public Types

enum class  eMode : uint8_t { None , Auto , FullSpin , SpinAndMutex }
 Spinlock mode. The default is 'Auto'. More...

Public Member Functions

 SpinLock ()
 Default SpinLock.
 SpinLock (eMode mode)
 SpinLock with the mode.

Private Member Functions

void _doLock ()
void _doUnlock ()
void _doLockReal ()
void _doUnlockReal ()

Private Attributes

std::atomic_flag m_spin_lock = ATOMIC_FLAG_INIT
eMode m_mode = eMode::SpinAndMutex

Friends

class ScopedLock
class ManualLock

Detailed Description

Member Enumeration Documentation

◆ eMode

enum class Arcane::SpinLock::eMode : uint8_t
strong

Spinlock mode. The default is 'Auto'.

Enumerator
Auto 

Automatic choice.

If Concurrency::getThreadImplementation()->isMultiThread() is true, then the mode is SpinAndMutex. Otherwise, the mode is None.

FullSpin 

Always uses a spinlock.

This type is faster if there is very little contention, but performance is very poor otherwise.

SpinAndMutex 

SpinLock then mutex.

Performs a spinlock then yields (std::this_thread::yield()) if it takes too long. This mode is only available if C++20 is used. Otherwise, it is equivalent to FullSpin.

Definition at line 80 of file arccore/src/concurrency/arccore/concurrency/SpinLock.h.

Constructor & Destructor Documentation

◆ SpinLock() [1/2]

Arcane::SpinLock::SpinLock ( )

Default SpinLock.

Definition at line 36 of file SpinLock.cc.

References SpinAndMutex.

◆ SpinLock() [2/2]

Arcane::SpinLock::SpinLock ( eMode mode)

SpinLock with the mode.

Definition at line 47 of file SpinLock.cc.

◆ ~SpinLock()

Arcane::SpinLock::~SpinLock ( )

Definition at line 57 of file SpinLock.cc.

Member Function Documentation

◆ _doLock()

void Arcane::SpinLock::_doLock ( )
inlineprivate

◆ _doLockReal()

void Arcane::SpinLock::_doLockReal ( )
private

Definition at line 65 of file SpinLock.cc.

◆ _doUnlock()

void Arcane::SpinLock::_doUnlock ( )
inlineprivate

◆ _doUnlockReal()

void Arcane::SpinLock::_doUnlockReal ( )
private

Definition at line 80 of file SpinLock.cc.

◆ ManualLock

friend class ManualLock
friend

◆ ScopedLock

friend class ScopedLock
friend

Member Data Documentation

◆ m_mode

eMode Arcane::SpinLock::m_mode = eMode::SpinAndMutex
private

◆ m_spin_lock

std::atomic_flag Arcane::SpinLock::m_spin_lock = ATOMIC_FLAG_INIT
private

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