CUBRID Engine
latest
|
#include <lockfree_freelist.hpp>
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_node * | claim (tran::descriptor &tdes) |
free_node * | claim (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::system & | get_transaction_system () |
tran::table & | get_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_node * | pop_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::system & | m_transys |
tran::table * | m_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 |
Definition at line 42 of file lockfree_freelist.hpp.
|
delete |
lockfree::freelist< T >::freelist | ( | tran::system & | transys, |
size_t | block_size, | ||
size_t | initial_block_count = 1 |
||
) |
Definition at line 139 of file lockfree_freelist.hpp.
References lockfree::freelist< T >::alloc_backbuffer(), assert, i, lockfree::freelist< T >::m_alloc_count, lockfree::freelist< T >::m_available_count, lockfree::freelist< T >::m_backbuffer_head, lockfree::freelist< T >::m_backbuffer_tail, lockfree::freelist< T >::m_bb_count, lockfree::freelist< T >::m_block_size, lockfree::freelist< T >::m_forced_alloc_count, lockfree::freelist< T >::m_retired_count, NULL, and lockfree::freelist< T >::swap_backbuffer().
lockfree::freelist< T >::~freelist | ( | ) |
Definition at line 259 of file lockfree_freelist.hpp.
References lockfree::freelist< T >::clear_free_nodes(), and lockfree::freelist< T >::m_trantable.
|
private |
Definition at line 195 of file lockfree_freelist.hpp.
References lockfree::freelist< T >::alloc_list(), lockfree::freelist< T >::m_backbuffer_head, lockfree::freelist< T >::m_backbuffer_tail, lockfree::freelist< T >::m_bb_count, lockfree::freelist< T >::m_block_size, NULL, and lockfree::freelist< T >::push_to_list().
Referenced by lockfree::freelist< T >::freelist(), and lockfree::freelist< T >::swap_backbuffer().
|
private |
Definition at line 227 of file lockfree_freelist.hpp.
References free_node(), i, lockfree::freelist< T >::m_alloc_count, lockfree::freelist< T >::m_block_size, NULL, lockfree::freelist< T >::free_node::set_freelist_next(), and lockfree::freelist< T >::free_node::set_owner().
Referenced by lockfree::freelist< T >::alloc_backbuffer(), and lockfree::freelist< T >::force_alloc_block().
|
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().
freelist< T >::free_node * lockfree::freelist< T >::claim | ( | tran::descriptor & | tdes | ) |
Definition at line 291 of file lockfree_freelist.hpp.
References assert, lockfree::freelist< T >::check_my_pointer(), cubregex::count(), lockfree::freelist< T >::force_alloc_block(), lockfree::freelist< T >::m_available_count, NULL, lockfree::freelist< T >::pop_from_available(), lockfree::tran::descriptor::reclaim_retired_list(), lockfree::tran::descriptor::start_tran(), and lockfree::freelist< T >::swap_backbuffer().
Referenced by lockfree::freelist< T >::claim(), and lockfree::hashmap< Key, T >::freelist_claim().
freelist< T >::free_node * lockfree::freelist< T >::claim | ( | tran::index | tran_index | ) |
Definition at line 284 of file lockfree_freelist.hpp.
References lockfree::freelist< T >::claim(), lockfree::tran::table::get_descriptor(), and lockfree::freelist< T >::m_trantable.
|
private |
Definition at line 267 of file lockfree_freelist.hpp.
References lockfree::freelist< T >::dealloc_list(), lockfree::freelist< T >::final_sanity_checks(), lockfree::freelist< T >::m_alloc_count, lockfree::freelist< T >::m_available_count, lockfree::freelist< T >::m_available_list, lockfree::freelist< T >::m_backbuffer_head, lockfree::freelist< T >::m_backbuffer_tail, lockfree::freelist< T >::m_bb_count, and NULL.
Referenced by lockfree::freelist< T >::~freelist().
|
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().
|
private |
Definition at line 448 of file lockfree_freelist.hpp.
References assert, lockfree::freelist< T >::m_alloc_count, lockfree::freelist< T >::m_available_count, lockfree::freelist< T >::m_available_list, lockfree::freelist< T >::m_backbuffer_head, lockfree::freelist< T >::m_backbuffer_tail, lockfree::freelist< T >::m_bb_count, lockfree::freelist< T >::m_block_size, and NULL.
Referenced by lockfree::freelist< T >::clear_free_nodes().
|
private |
Definition at line 213 of file lockfree_freelist.hpp.
References lockfree::freelist< T >::alloc_list(), lockfree::freelist< T >::m_available_count, lockfree::freelist< T >::m_available_list, lockfree::freelist< T >::m_block_size, lockfree::freelist< T >::m_forced_alloc_count, NULL, and lockfree::freelist< T >::push_to_list().
Referenced by lockfree::freelist< T >::claim().
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.
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.
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.
size_t lockfree::freelist< T >::get_claimed_count | ( | ) | const |
Definition at line 418 of file lockfree_freelist.hpp.
References lockfree::freelist< T >::m_alloc_count, lockfree::freelist< T >::m_available_count, lockfree::freelist< T >::m_bb_count, and lockfree::freelist< T >::m_retired_count.
Referenced by lockfree::hashmap< Key, T >::get_element_count().
size_t lockfree::freelist< T >::get_forced_allocation_count | ( | ) | const |
Definition at line 404 of file lockfree_freelist.hpp.
References lockfree::freelist< T >::m_forced_alloc_count.
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.
tran::system & lockfree::freelist< T >::get_transaction_system | ( | ) |
Definition at line 434 of file lockfree_freelist.hpp.
References lockfree::freelist< T >::m_transys.
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().
|
private |
Definition at line 322 of file lockfree_freelist.hpp.
References lockfree::freelist< T >::free_node::get_freelist_next(), lockfree::freelist< T >::m_available_list, NULL, and lockfree::freelist< T >::free_node::reset_freelist_next().
Referenced by lockfree::freelist< T >::claim().
|
private |
Definition at line 368 of file lockfree_freelist.hpp.
References assert, lockfree::freelist< T >::free_node::get_freelist_next(), NULL, and lockfree::freelist< T >::free_node::set_freelist_next().
Referenced by lockfree::freelist< T >::alloc_backbuffer(), lockfree::freelist< T >::force_alloc_block(), lockfree::freelist< T >::free_node::reclaim(), and lockfree::freelist< T >::swap_backbuffer().
void lockfree::freelist< T >::retire | ( | tran::descriptor & | tdes, |
free_node & | node | ||
) |
Definition at line 358 of file lockfree_freelist.hpp.
References assert, lockfree::freelist< T >::check_my_pointer(), lockfree::freelist< T >::free_node::get_freelist_next(), lockfree::freelist< T >::m_retired_count, NULL, and lockfree::tran::descriptor::retire_node().
Referenced by lockfree::hashmap< Key, T >::freelist_retire(), and lockfree::freelist< T >::retire().
void lockfree::freelist< T >::retire | ( | tran::index | tran_index, |
free_node & | node | ||
) |
Definition at line 351 of file lockfree_freelist.hpp.
References lockfree::tran::table::get_descriptor(), lockfree::freelist< T >::m_trantable, and lockfree::freelist< T >::retire().
|
private |
Definition at line 169 of file lockfree_freelist.hpp.
References lockfree::freelist< T >::alloc_backbuffer(), assert, lockfree::freelist< T >::m_available_count, lockfree::freelist< T >::m_available_list, lockfree::freelist< T >::m_backbuffer_head, lockfree::freelist< T >::m_backbuffer_tail, lockfree::freelist< T >::m_bb_count, NULL, and lockfree::freelist< T >::push_to_list().
Referenced by lockfree::freelist< T >::claim(), and lockfree::freelist< T >::freelist().
|
private |
Definition at line 83 of file lockfree_freelist.hpp.
Referenced by lockfree::freelist< T >::alloc_list(), lockfree::freelist< T >::clear_free_nodes(), lockfree::freelist< T >::final_sanity_checks(), lockfree::freelist< T >::freelist(), lockfree::freelist< T >::get_alloc_count(), and lockfree::freelist< T >::get_claimed_count().
|
private |
Definition at line 82 of file lockfree_freelist.hpp.
Referenced by lockfree::freelist< T >::claim(), lockfree::freelist< T >::clear_free_nodes(), lockfree::freelist< T >::final_sanity_checks(), lockfree::freelist< T >::force_alloc_block(), lockfree::freelist< T >::freelist(), lockfree::freelist< T >::get_available_count(), lockfree::freelist< T >::get_claimed_count(), lockfree::freelist< T >::free_node::reclaim(), and lockfree::freelist< T >::swap_backbuffer().
|
private |
Definition at line 74 of file lockfree_freelist.hpp.
Referenced by lockfree::freelist< T >::clear_free_nodes(), lockfree::freelist< T >::final_sanity_checks(), lockfree::freelist< T >::force_alloc_block(), lockfree::freelist< T >::pop_from_available(), lockfree::freelist< T >::free_node::reclaim(), and lockfree::freelist< T >::swap_backbuffer().
|
private |
|
private |
|
private |
Definition at line 84 of file lockfree_freelist.hpp.
Referenced by lockfree::freelist< T >::alloc_backbuffer(), lockfree::freelist< T >::clear_free_nodes(), lockfree::freelist< T >::final_sanity_checks(), lockfree::freelist< T >::freelist(), lockfree::freelist< T >::get_backbuffer_count(), lockfree::freelist< T >::get_claimed_count(), and lockfree::freelist< T >::swap_backbuffer().
|
private |
Definition at line 72 of file lockfree_freelist.hpp.
Referenced by lockfree::freelist< T >::alloc_backbuffer(), lockfree::freelist< T >::alloc_list(), lockfree::freelist< T >::final_sanity_checks(), lockfree::freelist< T >::force_alloc_block(), and lockfree::freelist< T >::freelist().
|
private |
Definition at line 85 of file lockfree_freelist.hpp.
Referenced by lockfree::freelist< T >::force_alloc_block(), lockfree::freelist< T >::freelist(), and lockfree::freelist< T >::get_forced_allocation_count().
|
private |
Definition at line 86 of file lockfree_freelist.hpp.
Referenced by lockfree::freelist< T >::freelist(), lockfree::freelist< T >::get_claimed_count(), lockfree::freelist< T >::get_retired_count(), lockfree::freelist< T >::free_node::reclaim(), and lockfree::freelist< T >::retire().
|
private |
Definition at line 69 of file lockfree_freelist.hpp.
Referenced by lockfree::freelist< T >::get_transaction_system().
|
private |
Definition at line 70 of file lockfree_freelist.hpp.
Referenced by lockfree::freelist< T >::claim(), lockfree::freelist< T >::get_transaction_table(), lockfree::freelist< T >::retire(), and lockfree::freelist< T >::~freelist().