CUBRID Engine  latest
lockfree::freelist< T > Class Template Reference

#include <lockfree_freelist.hpp>

Collaboration diagram for lockfree::freelist< T >:
Collaboration graph

Classes

class  free_node
 

Public Member Functions

 freelist ()=delete
 
 freelist (tran::system &transys, size_t block_size, size_t initial_block_count=1)
 
 ~freelist ()
 
free_nodeclaim (tran::descriptor &tdes)
 
free_nodeclaim (tran::index tran_index)
 
void retire (tran::descriptor &tdes, free_node &node)
 
void retire (tran::index tran_index, free_node &node)
 
size_t get_alloc_count () const
 
size_t get_available_count () const
 
size_t get_backbuffer_count () const
 
size_t get_forced_allocation_count () const
 
size_t get_retired_count () const
 
size_t get_claimed_count () const
 
tran::systemget_transaction_system ()
 
tran::tableget_transaction_table ()
 

Private Member Functions

void swap_backbuffer ()
 
void alloc_backbuffer ()
 
void force_alloc_block ()
 
void alloc_list (free_node *&head, free_node *&tail)
 
void dealloc_list (free_node *head)
 
free_nodepop_from_available ()
 
void push_to_list (free_node &head, free_node &tail, std::atomic< free_node * > &dest)
 
void clear_free_nodes ()
 
void final_sanity_checks () const
 
void check_my_pointer (free_node *node)
 

Private Attributes

tran::systemm_transys
 
tran::tablem_trantable
 
size_t m_block_size
 
std::atomic< free_node * > m_available_list
 
std::atomic< free_node * > m_backbuffer_head
 
std::atomic< free_node * > m_backbuffer_tail
 
std::atomic< size_t > m_available_count
 
std::atomic< size_t > m_alloc_count
 
std::atomic< size_t > m_bb_count
 
std::atomic< size_t > m_forced_alloc_count
 
std::atomic< size_t > m_retired_count
 

Detailed Description

template<class T>
class lockfree::freelist< T >

Definition at line 42 of file lockfree_freelist.hpp.

Constructor & Destructor Documentation

template<class T >
lockfree::freelist< T >::freelist ( )
delete

Member Function Documentation

template<class T >
void lockfree::freelist< T >::check_my_pointer ( free_node node)
private

Definition at line 477 of file lockfree_freelist.hpp.

References assert, and lockfree::freelist< T >::free_node::m_owner.

Referenced by lockfree::freelist< T >::claim(), and lockfree::freelist< T >::retire().

Here is the caller graph for this function:

template<class T >
void lockfree::freelist< T >::dealloc_list ( free_node head)
private

Definition at line 247 of file lockfree_freelist.hpp.

References lockfree::freelist< T >::free_node::get_freelist_next(), and NULL.

Referenced by lockfree::freelist< T >::clear_free_nodes().

Here is the caller graph for this function:

template<class T >
size_t lockfree::freelist< T >::get_alloc_count ( ) const

Definition at line 383 of file lockfree_freelist.hpp.

References lockfree::freelist< T >::m_alloc_count.

template<class T >
size_t lockfree::freelist< T >::get_available_count ( ) const

Definition at line 390 of file lockfree_freelist.hpp.

References lockfree::freelist< T >::m_available_count.

template<class T >
size_t lockfree::freelist< T >::get_backbuffer_count ( ) const

Definition at line 397 of file lockfree_freelist.hpp.

References lockfree::freelist< T >::m_bb_count.

template<class T >
size_t lockfree::freelist< T >::get_claimed_count ( ) const
template<class T >
size_t lockfree::freelist< T >::get_forced_allocation_count ( ) const
template<class T >
size_t lockfree::freelist< T >::get_retired_count ( ) const

Definition at line 411 of file lockfree_freelist.hpp.

References lockfree::freelist< T >::m_retired_count.

template<class T >
tran::system & lockfree::freelist< T >::get_transaction_system ( )

Definition at line 434 of file lockfree_freelist.hpp.

References lockfree::freelist< T >::m_transys.

template<class T >
tran::table & lockfree::freelist< T >::get_transaction_table ( )

Definition at line 441 of file lockfree_freelist.hpp.

References lockfree::freelist< T >::m_trantable.

Referenced by lockfree::hashmap< Key, T >::get_tran_descriptor().

Here is the caller graph for this function:

template<class T >
freelist< T >::free_node * lockfree::freelist< T >::pop_from_available ( )
private
template<class T >
void lockfree::freelist< T >::retire ( tran::index  tran_index,
free_node node 
)

Member Data Documentation

template<class T >
std::atomic<size_t> lockfree::freelist< T >::m_forced_alloc_count
private
template<class T >
tran::system& lockfree::freelist< T >::m_transys
private

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