Skip to content

File lock_free.h

FileList > base > lock_free.h

Go to the source code of this file

  • #include "dbtype_def.h"
  • #include "lockfree_bitmap.hpp"
  • #include "porting.h"
  • #include <cassert>
  • #include <pthread.h>

Classes

Type Name
struct lf_entry_descriptor
struct lf_freelist
struct lf_hash_table
class lf_hash_table_cpp <class Key, class T>
class iterator
struct lf_hash_table_iterator
struct lf_tran_entry
struct lf_tran_system

Public Types

Type Name
typedef void *(* LF_ENTRY_ALLOC_FUNC
typedef struct lf_entry_descriptor LF_ENTRY_DESCRIPTOR
typedef int(* LF_ENTRY_DUPLICATE_KEY_HANDLER
typedef int(* LF_ENTRY_FREE_FUNC
typedef unsigned int(* LF_ENTRY_HASH_FUNC
typedef int(* LF_ENTRY_INITIALIZE_FUNC
typedef int(* LF_ENTRY_KEY_COMPARE_FUNC
typedef int(* LF_ENTRY_KEY_COPY_FUNC
typedef int(* LF_ENTRY_UNINITIALIZE_FUNC
typedef struct lf_freelist LF_FREELIST
typedef struct lf_hash_table LF_HASH_TABLE
typedef struct lf_hash_table_iterator LF_HASH_TABLE_ITERATOR
typedef struct lf_tran_entry LF_TRAN_ENTRY
typedef struct lf_tran_system LF_TRAN_SYSTEM

Public Attributes

Type Name
LF_TRAN_SYSTEM catalog_Ts
LF_TRAN_SYSTEM dwb_slots_Ts
LF_TRAN_SYSTEM fpcache_Ts
LF_TRAN_SYSTEM free_sort_list_Ts
LF_TRAN_SYSTEM global_unique_stats_Ts
LF_TRAN_SYSTEM hfid_table_Ts
LF_TRAN_SYSTEM obj_lock_ent_Ts
LF_TRAN_SYSTEM obj_lock_res_Ts
LF_TRAN_SYSTEM sessions_Ts
LF_TRAN_SYSTEM spage_saving_Ts
LF_TRAN_SYSTEM xcache_Ts

Public Functions

Type Name
int lf_callback_vpid_compare (void * vpid_1, void * vpid_2)
int lf_callback_vpid_copy (void * src, void * dest)
unsigned int lf_callback_vpid_hash (void * vpid, int htsize)
void lf_destroy_transaction_systems (void)
void * lf_freelist_claim (LF_TRAN_ENTRY * tran_entry, LF_FREELIST * freelist)
void lf_freelist_destroy (LF_FREELIST * freelist)
int lf_freelist_init (LF_FREELIST * freelist, int initial_blocks, int block_size, LF_ENTRY_DESCRIPTOR * edesc, LF_TRAN_SYSTEM * tran_system)
int lf_freelist_retire (LF_TRAN_ENTRY * tran_entry, LF_FREELIST * freelist, void * entry)
int lf_freelist_transport (LF_TRAN_ENTRY * tran_entry, LF_FREELIST * freelist)
void lf_hash_clear (LF_TRAN_ENTRY * tran, LF_HASH_TABLE * table)
void lf_hash_create_iterator (LF_HASH_TABLE_ITERATOR * iterator, LF_TRAN_ENTRY * tran_entry, LF_HASH_TABLE * table)
int lf_hash_delete (LF_TRAN_ENTRY * tran, LF_HASH_TABLE * table, void * key, int * success)
int lf_hash_delete_already_locked (LF_TRAN_ENTRY * tran, LF_HASH_TABLE * table, void * key, void * locked_entry, int * success)
void lf_hash_destroy (LF_HASH_TABLE * table)
int lf_hash_find (LF_TRAN_ENTRY * tran, LF_HASH_TABLE * table, void * key, void ** entry)
int lf_hash_find_or_insert (LF_TRAN_ENTRY * tran, LF_HASH_TABLE * table, void * key, void ** entry, int * inserted)
int lf_hash_init (LF_HASH_TABLE * table, LF_FREELIST * freelist, unsigned int hash_size, LF_ENTRY_DESCRIPTOR * edesc)
int lf_hash_insert (LF_TRAN_ENTRY * tran, LF_HASH_TABLE * table, void * key, void ** entry, int * inserted)
int lf_hash_insert_given (LF_TRAN_ENTRY * tran, LF_HASH_TABLE * table, void * key, void ** entry, int * inserted)
void * lf_hash_iterate (LF_HASH_TABLE_ITERATOR * it)
int lf_initialize_transaction_systems (int max_threads)
int lf_io_list_find (void ** list_p, void * key, LF_ENTRY_DESCRIPTOR * edesc, void ** entry)
int lf_io_list_find_or_insert (void ** list_p, void * new_entry, LF_ENTRY_DESCRIPTOR * edesc, void ** entry)
int lf_list_delete (LF_TRAN_ENTRY * tran, void ** list_p, void * key, void * locked_entry, int * behavior_flags, LF_ENTRY_DESCRIPTOR * edesc, LF_FREELIST * freelist, int * success)
int lf_list_find (LF_TRAN_ENTRY * tran, void ** list_p, void * key, int * behavior_flags, LF_ENTRY_DESCRIPTOR * edesc, void ** entry)
void * lf_stack_pop (void ** top, LF_ENTRY_DESCRIPTOR * edesc)
int lf_stack_push (void ** top, void * entry, LF_ENTRY_DESCRIPTOR * edesc)
void lf_tran_compute_minimum_transaction_id (LF_TRAN_SYSTEM * sys)
void lf_tran_destroy_entry (LF_TRAN_ENTRY * entry)
void lf_tran_end (LF_TRAN_ENTRY * entry)
LF_TRAN_ENTRY * lf_tran_request_entry (LF_TRAN_SYSTEM * sys)
void lf_tran_return_entry (LF_TRAN_ENTRY * entry)
void lf_tran_start (LF_TRAN_ENTRY * entry, bool incr)
void lf_tran_system_destroy (LF_TRAN_SYSTEM * sys)
int lf_tran_system_init (LF_TRAN_SYSTEM * sys, int max_threads)

Macros

Type Name
define LF_EM_NOT_USING_MUTEX 0
define LF_EM_USING_MUTEX 1
define LF_ENTRY_DESCRIPTOR_INITIALIZER /* multi line expression */
define LF_ENTRY_DESCRIPTOR_MAX_ALLOC 2147483647 /\* [**MAX**](broker__monitor_8c.md#function-timeout) [**INT**](broker__monitor_8c.md#function-timeout) \*/
define LF_FREELIST_INITIALIZER { [**NULL**](freelistheap_8h.md#define-null), 0, 0, 0, 0, [**NULL**](freelistheap_8h.md#define-null), [**NULL**](freelistheap_8h.md#define-null) }
define LF_HASH_TABLE_INITIALIZER { [**NULL**](freelistheap_8h.md#define-null), [**NULL**](freelistheap_8h.md#define-null), [**PTHREAD\_MUTEX\_INITIALIZER**](broker__monitor_8c.md#function-timeout), 0, [**NULL**](freelistheap_8h.md#define-null), [**NULL**](freelistheap_8h.md#define-null) }
define LF_LIST_BF_FIND_OR_INSERT (([**int**](broker__monitor_8c.md#function-timeout)) 0x08)
define LF_LIST_BF_INSERT_GIVEN (([**int**](broker__monitor_8c.md#function-timeout)) 0x04)
define LF_LIST_BF_IS_FLAG_SET (bf, flag) ((\*([**bf**](broker__monitor_8c.md#function-timeout)) & ([**flag**](classflag.md))) != 0)
define LF_LIST_BF_LOCK_ON_DELETE (([**int**](broker__monitor_8c.md#function-timeout)) 0x10)
define LF_LIST_BF_NONE 0x0
define LF_LIST_BF_RESTART_ON_DUPLICATE (([**int**](broker__monitor_8c.md#function-timeout)) 0x02) /\* [**Not**](broker__monitor_8c.md#function-timeout) used [**for**](dynamic__load_8c.md#function-for) now. \*/
define LF_LIST_BF_RETURN_ON_RESTART (([**int**](broker__monitor_8c.md#function-timeout)) 0x01)
define LF_LIST_BF_SET_FLAG (bf, flag) (\*([**bf**](broker__monitor_8c.md#function-timeout)) = \*([**bf**](broker__monitor_8c.md#function-timeout)) \| ([**flag**](classflag.md)))
define LF_LIST_BR_DUPLICATE (([**int**](broker__monitor_8c.md#function-timeout)) 0x200) /\* [**Not**](broker__monitor_8c.md#function-timeout) used [**for**](dynamic__load_8c.md#function-for) now. \*/
define LF_LIST_BR_IS_FLAG_SET (br, flag) ((\*([**br**](broker__monitor_8c.md#function-timeout)) & ([**flag**](classflag.md))))
define LF_LIST_BR_RESTARTED (([**int**](broker__monitor_8c.md#function-timeout)) 0x100)
define LF_LIST_BR_SET_FLAG (br, flag) (\*([**br**](broker__monitor_8c.md#function-timeout)) = \*([**br**](broker__monitor_8c.md#function-timeout)) \| ([**flag**](classflag.md)))
define LF_NULL_TRANSACTION_ID [**ULONG\_MAX**](broker__monitor_8c.md#function-timeout)
define LF_TRAN_CLEANUP_NECESSARY (e) (([**e**](broker__monitor_8c.md#function-timeout))-&gt;tran\_system-&gt;min\_active\_transaction\_id &gt; ([**e**](broker__monitor_8c.md#function-timeout))-&gt;last\_cleanup\_id)
define LF_TRAN_ENTRY_INITIALIZER { 0, [**LF\_NULL\_TRANSACTION\_ID**](lock__free_8h.md#define-lf_null_transaction_id), [**NULL**](freelistheap_8h.md#define-null), [**NULL**](freelistheap_8h.md#define-null), [**NULL**](freelistheap_8h.md#define-null), -1, [**false**](broker__monitor_8c.md#function-timeout) }
define LF_TRAN_SYSTEM_INITIALIZER { [**NULL**](freelistheap_8h.md#define-null), 0, {}, 0, 0, 100, 0, [**NULL**](freelistheap_8h.md#define-null) }
define VOLATILE_ACCESS (v, t) (\*(([**t**](broker__monitor_8c.md#function-timeout) [**volatile**](broker__monitor_8c.md#function-timeout) \*) &(v)))
define lf_tran_end_with_mb (entry) [**MEMORY\_BARRIER**](broker__monitor_8c.md#function-timeout) (); [**lf\_tran\_end**](lock__free_8c.md#function-lf_tran_end) (entry)
define lf_tran_start_with_mb (entry, incr) [**lf\_tran\_start**](lock__free_8c.md#function-lf_tran_start) (entry, [**incr**](broker__monitor_8c.md#function-timeout)); [**MEMORY\_BARRIER**](broker__monitor_8c.md#function-timeout) ()

Public Types Documentation

typedef LF_ENTRY_ALLOC_FUNC

typedef void *(* LF_ENTRY_ALLOC_FUNC) ();

typedef LF_ENTRY_DESCRIPTOR

typedef struct lf_entry_descriptor LF_ENTRY_DESCRIPTOR;

typedef LF_ENTRY_DUPLICATE_KEY_HANDLER

typedef int(* LF_ENTRY_DUPLICATE_KEY_HANDLER) (void *key, void *existing);

typedef LF_ENTRY_FREE_FUNC

typedef int(* LF_ENTRY_FREE_FUNC) (void *);

typedef LF_ENTRY_HASH_FUNC

typedef unsigned int(* LF_ENTRY_HASH_FUNC) (void *key, int htsize);

typedef LF_ENTRY_INITIALIZE_FUNC

typedef int(* LF_ENTRY_INITIALIZE_FUNC) (void *);

typedef LF_ENTRY_KEY_COMPARE_FUNC

typedef int(* LF_ENTRY_KEY_COMPARE_FUNC) (void *key1, void *key2);

typedef LF_ENTRY_KEY_COPY_FUNC

typedef int(* LF_ENTRY_KEY_COPY_FUNC) (void *src, void *dest);

typedef LF_ENTRY_UNINITIALIZE_FUNC

typedef int(* LF_ENTRY_UNINITIALIZE_FUNC) (void *);

typedef LF_FREELIST

typedef struct lf_freelist LF_FREELIST;

typedef LF_HASH_TABLE

typedef struct lf_hash_table LF_HASH_TABLE;

typedef LF_HASH_TABLE_ITERATOR

typedef struct lf_hash_table_iterator LF_HASH_TABLE_ITERATOR;

typedef LF_TRAN_ENTRY

typedef struct lf_tran_entry LF_TRAN_ENTRY;

typedef LF_TRAN_SYSTEM

typedef struct lf_tran_system LF_TRAN_SYSTEM;

Public Attributes Documentation

variable catalog_Ts

LF_TRAN_SYSTEM catalog_Ts;

variable dwb_slots_Ts

LF_TRAN_SYSTEM dwb_slots_Ts;

variable fpcache_Ts

LF_TRAN_SYSTEM fpcache_Ts;

variable free_sort_list_Ts

LF_TRAN_SYSTEM free_sort_list_Ts;

variable global_unique_stats_Ts

LF_TRAN_SYSTEM global_unique_stats_Ts;

variable hfid_table_Ts

LF_TRAN_SYSTEM hfid_table_Ts;

variable obj_lock_ent_Ts

LF_TRAN_SYSTEM obj_lock_ent_Ts;

variable obj_lock_res_Ts

LF_TRAN_SYSTEM obj_lock_res_Ts;

variable sessions_Ts

LF_TRAN_SYSTEM sessions_Ts;

variable spage_saving_Ts

LF_TRAN_SYSTEM spage_saving_Ts;

variable xcache_Ts

LF_TRAN_SYSTEM xcache_Ts;

Public Functions Documentation

function lf_callback_vpid_compare

int lf_callback_vpid_compare (
    void * vpid_1,
    void * vpid_2
) 

function lf_callback_vpid_copy

int lf_callback_vpid_copy (
    void * src,
    void * dest
) 

function lf_callback_vpid_hash

unsigned  int lf_callback_vpid_hash (
    void * vpid,
    int htsize
) 

function lf_destroy_transaction_systems

void lf_destroy_transaction_systems (
    void
) 

function lf_freelist_claim

void * lf_freelist_claim (
    LF_TRAN_ENTRY * tran_entry,
    LF_FREELIST * freelist
) 

function lf_freelist_destroy

void lf_freelist_destroy (
    LF_FREELIST * freelist
) 

function lf_freelist_init

int lf_freelist_init (
    LF_FREELIST * freelist,
    int initial_blocks,
    int block_size,
    LF_ENTRY_DESCRIPTOR * edesc,
    LF_TRAN_SYSTEM * tran_system
) 

function lf_freelist_retire

int lf_freelist_retire (
    LF_TRAN_ENTRY * tran_entry,
    LF_FREELIST * freelist,
    void * entry
) 

function lf_freelist_transport

int lf_freelist_transport (
    LF_TRAN_ENTRY * tran_entry,
    LF_FREELIST * freelist
) 

function lf_hash_clear

void lf_hash_clear (
    LF_TRAN_ENTRY * tran,
    LF_HASH_TABLE * table
) 

function lf_hash_create_iterator

void lf_hash_create_iterator (
    LF_HASH_TABLE_ITERATOR * iterator,
    LF_TRAN_ENTRY * tran_entry,
    LF_HASH_TABLE * table
) 

function lf_hash_delete

int lf_hash_delete (
    LF_TRAN_ENTRY * tran,
    LF_HASH_TABLE * table,
    void * key,
    int * success
) 

function lf_hash_delete_already_locked

int lf_hash_delete_already_locked (
    LF_TRAN_ENTRY * tran,
    LF_HASH_TABLE * table,
    void * key,
    void * locked_entry,
    int * success
) 

function lf_hash_destroy

void lf_hash_destroy (
    LF_HASH_TABLE * table
) 

function lf_hash_find

int lf_hash_find (
    LF_TRAN_ENTRY * tran,
    LF_HASH_TABLE * table,
    void * key,
    void ** entry
) 

function lf_hash_find_or_insert

int lf_hash_find_or_insert (
    LF_TRAN_ENTRY * tran,
    LF_HASH_TABLE * table,
    void * key,
    void ** entry,
    int * inserted
) 

function lf_hash_init

int lf_hash_init (
    LF_HASH_TABLE * table,
    LF_FREELIST * freelist,
    unsigned  int hash_size,
    LF_ENTRY_DESCRIPTOR * edesc
) 

function lf_hash_insert

int lf_hash_insert (
    LF_TRAN_ENTRY * tran,
    LF_HASH_TABLE * table,
    void * key,
    void ** entry,
    int * inserted
) 

function lf_hash_insert_given

int lf_hash_insert_given (
    LF_TRAN_ENTRY * tran,
    LF_HASH_TABLE * table,
    void * key,
    void ** entry,
    int * inserted
) 

function lf_hash_iterate

void * lf_hash_iterate (
    LF_HASH_TABLE_ITERATOR * it
) 

function lf_initialize_transaction_systems

int lf_initialize_transaction_systems (
    int max_threads
) 

function lf_io_list_find

int lf_io_list_find (
    void ** list_p,
    void * key,
    LF_ENTRY_DESCRIPTOR * edesc,
    void ** entry
) 

function lf_io_list_find_or_insert

int lf_io_list_find_or_insert (
    void ** list_p,
    void * new_entry,
    LF_ENTRY_DESCRIPTOR * edesc,
    void ** entry
) 

function lf_list_delete

int lf_list_delete (
    LF_TRAN_ENTRY * tran,
    void ** list_p,
    void * key,
    void * locked_entry,
    int * behavior_flags,
    LF_ENTRY_DESCRIPTOR * edesc,
    LF_FREELIST * freelist,
    int * success
) 

function lf_list_find

int lf_list_find (
    LF_TRAN_ENTRY * tran,
    void ** list_p,
    void * key,
    int * behavior_flags,
    LF_ENTRY_DESCRIPTOR * edesc,
    void ** entry
) 

function lf_stack_pop

void * lf_stack_pop (
    void ** top,
    LF_ENTRY_DESCRIPTOR * edesc
) 

function lf_stack_push

int lf_stack_push (
    void ** top,
    void * entry,
    LF_ENTRY_DESCRIPTOR * edesc
) 

function lf_tran_compute_minimum_transaction_id

void lf_tran_compute_minimum_transaction_id (
    LF_TRAN_SYSTEM * sys
) 

function lf_tran_destroy_entry

void lf_tran_destroy_entry (
    LF_TRAN_ENTRY * entry
) 

function lf_tran_end

void lf_tran_end (
    LF_TRAN_ENTRY * entry
) 

function lf_tran_request_entry

LF_TRAN_ENTRY * lf_tran_request_entry (
    LF_TRAN_SYSTEM * sys
) 

function lf_tran_return_entry

void lf_tran_return_entry (
    LF_TRAN_ENTRY * entry
) 

function lf_tran_start

void lf_tran_start (
    LF_TRAN_ENTRY * entry,
    bool incr
) 

function lf_tran_system_destroy

void lf_tran_system_destroy (
    LF_TRAN_SYSTEM * sys
) 

function lf_tran_system_init

int lf_tran_system_init (
    LF_TRAN_SYSTEM * sys,
    int max_threads
) 

Macro Definition Documentation

define LF_EM_NOT_USING_MUTEX

#define LF_EM_NOT_USING_MUTEX `0`

define LF_EM_USING_MUTEX

#define LF_EM_USING_MUTEX `1`

define LF_ENTRY_DESCRIPTOR_INITIALIZER

#define LF_ENTRY_DESCRIPTOR_INITIALIZER `{ 0, 0, 0, 0, 0, 0, LF_ENTRY_DESCRIPTOR_MAX_ALLOC , NULL , NULL , NULL , \ NULL , NULL , NULL , NULL , NULL }`

define LF_ENTRY_DESCRIPTOR_MAX_ALLOC

#define LF_ENTRY_DESCRIPTOR_MAX_ALLOC `2147483647   /* MAX  INT */`

define LF_FREELIST_INITIALIZER

#define LF_FREELIST_INITIALIZER `{ NULL , 0, 0, 0, 0, NULL , NULL }`

define LF_HASH_TABLE_INITIALIZER

#define LF_HASH_TABLE_INITIALIZER `{ NULL , NULL , PTHREAD_MUTEX_INITIALIZER , 0, NULL , NULL }`

define LF_LIST_BF_FIND_OR_INSERT

#define LF_LIST_BF_FIND_OR_INSERT `(( int ) 0x08)`

define LF_LIST_BF_INSERT_GIVEN

#define LF_LIST_BF_INSERT_GIVEN `(( int ) 0x04)`

define LF_LIST_BF_IS_FLAG_SET

#define LF_LIST_BF_IS_FLAG_SET (
    bf,
    flag
) `((*( bf ) & ( flag )) != 0)`

define LF_LIST_BF_LOCK_ON_DELETE

#define LF_LIST_BF_LOCK_ON_DELETE `(( int ) 0x10)`

define LF_LIST_BF_NONE

#define LF_LIST_BF_NONE `0x0`

define LF_LIST_BF_RESTART_ON_DUPLICATE

#define LF_LIST_BF_RESTART_ON_DUPLICATE `(( int ) 0x02) /* Not used for now. */`

define LF_LIST_BF_RETURN_ON_RESTART

#define LF_LIST_BF_RETURN_ON_RESTART `(( int ) 0x01)`

define LF_LIST_BF_SET_FLAG

#define LF_LIST_BF_SET_FLAG (
    bf,
    flag
) `(*( bf ) = *( bf ) | ( flag ))`

define LF_LIST_BR_DUPLICATE

#define LF_LIST_BR_DUPLICATE `(( int ) 0x200)   /* Not used for now. */`

define LF_LIST_BR_IS_FLAG_SET

#define LF_LIST_BR_IS_FLAG_SET (
    br,
    flag
) `((*( br ) & ( flag )))`

define LF_LIST_BR_RESTARTED

#define LF_LIST_BR_RESTARTED `(( int ) 0x100)`

define LF_LIST_BR_SET_FLAG

#define LF_LIST_BR_SET_FLAG (
    br,
    flag
) `(*( br ) = *( br ) | ( flag ))`

define LF_NULL_TRANSACTION_ID

#define LF_NULL_TRANSACTION_ID `ULONG_MAX`

define LF_TRAN_CLEANUP_NECESSARY

#define LF_TRAN_CLEANUP_NECESSARY (
    e
) `(( e )->tran_system->min_active_transaction_id > ( e )->last_cleanup_id)`

define LF_TRAN_ENTRY_INITIALIZER

#define LF_TRAN_ENTRY_INITIALIZER `{ 0, LF_NULL_TRANSACTION_ID , NULL , NULL , NULL , -1, false }`

define LF_TRAN_SYSTEM_INITIALIZER

#define LF_TRAN_SYSTEM_INITIALIZER `{ NULL , 0, {}, 0, 0, 100, 0, NULL }`

define VOLATILE_ACCESS

#define VOLATILE_ACCESS (
    v,
    t
) `(*(( t  volatile *) &(v)))`

define lf_tran_end_with_mb

#define lf_tran_end_with_mb (
    entry
) `MEMORY_BARRIER (); lf_tran_end (entry)`

define lf_tran_start_with_mb

#define lf_tran_start_with_mb (
    entry,
    incr
) `lf_tran_start (entry, incr ); MEMORY_BARRIER ()`


The documentation for this class was generated from the following file cubrid/src/base/lock_free.h