rippled
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes | List of all members
xrpl::spinlock< T > Class Template Reference

A spinlock implemented on top of an atomic integer. More...

#include <spinlock.h>

Public Member Functions

 spinlock (spinlock const &)=delete
 
spinlockoperator= (spinlock const &)=delete
 
 spinlock (std::atomic< T > &lock)
 Grabs the.
 
bool try_lock ()
 
void lock ()
 
void unlock ()
 

Private Attributes

std::atomic< T > & lock_
 

Detailed Description

template<class T>
class xrpl::spinlock< T >

A spinlock implemented on top of an atomic integer.

Note
Using packed_spinlock and spinlock against the same underlying atomic integer can result in spinlock not being able to actually acquire the lock during periods of high contention, because of how the two locks operate: spinlock will spin trying to grab all the bits at once, whereas any given packed_spinlock will only try to grab one bit at a time. Caveat emptor.

This class meets the requirements of Lockable: https://en.cppreference.com/w/cpp/named_req/Lockable

Definition at line 147 of file spinlock.h.

Constructor & Destructor Documentation

◆ spinlock() [1/2]

template<class T >
xrpl::spinlock< T >::spinlock ( spinlock< T > const &  )
delete

◆ spinlock() [2/2]

template<class T >
xrpl::spinlock< T >::spinlock ( std::atomic< T > &  lock)

Grabs the.

Parameters
lockThe atomic integer to spin against.
Note
For performance reasons, you should strive to have lock be on a cacheline by itself.

Definition at line 167 of file spinlock.h.

Member Function Documentation

◆ operator=()

template<class T >
spinlock & xrpl::spinlock< T >::operator= ( spinlock< T > const &  )
delete

◆ try_lock()

template<class T >
bool xrpl::spinlock< T >::try_lock ( )

Definition at line 172 of file spinlock.h.

◆ lock()

template<class T >
void xrpl::spinlock< T >::lock ( )

Definition at line 181 of file spinlock.h.

◆ unlock()

template<class T >
void xrpl::spinlock< T >::unlock ( )

Definition at line 195 of file spinlock.h.

Member Data Documentation

◆ lock_

template<class T >
std::atomic<T>& xrpl::spinlock< T >::lock_
private

Definition at line 153 of file spinlock.h.