Zero  0.1.0
Public Member Functions | Public Attributes | Private Member Functions | List of all members
lil_global_table_base Class Reference

LIL global lock table to protect Volume/Store from concurrent accesses. More...

#include <lock_lil.h>

Inheritance diagram for lil_global_table_base:
lil_global_store_table lil_global_vol_table

Public Member Functions

w_rc_t request_lock (lil_lock_modes_t mode)
 
void release_locks (bool *lock_taken, bool read_lock_only=false, lsn_t commit_lsn=lsn_t::null)
 

Public Attributes

uint16_t _IS_count
 
uint16_t _IX_count
 
uint16_t _S_count
 
bool _X_taken
 
bool _dummy1
 
uint16_t _waiting_S
 
uint16_t _waiting_X
 
uint32_t _release_version
 
lsn_t _x_lock_tag
 
pthread_mutex_t _waiter_mutex
 
pthread_cond_t _waiter_cond
 
tatas_lock _spin_lock
 

Private Member Functions

w_rc_t _request_lock_IS (lsn_t &observed_tag)
 
w_rc_t _request_lock_IX (lsn_t &observed_tag)
 
w_rc_t _request_lock_S (lsn_t &observed_tag)
 
w_rc_t _request_lock_X (lsn_t &observed_tag)
 
bool _cond_timedwait (uint32_t base_version, uint32_t timeout_microsec)
 

Detailed Description

LIL global lock table to protect Volume/Store from concurrent accesses.

This class provides a super-fast yet non-starving locks for classes that mainly have intent locks (IS/IX). As far as absolute locks (S/X) are rare, this performs way faster than usual lock tables which uses mutex and forms lock-chains to do inter-thread communications. This class only uses spinlocks, counters and sleeps. For more details, see jira ticket:94 "Lightweight Intent Lock (LIL)" (originally trac ticket:96).

Member Function Documentation

§ _cond_timedwait()

bool lil_global_table_base::_cond_timedwait ( uint32_t  base_version,
uint32_t  timeout_microsec 
)
private
Returns
whether timeout happened .

§ _request_lock_IS()

w_rc_t lil_global_table_base::_request_lock_IS ( lsn_t observed_tag)
private

§ _request_lock_IX()

w_rc_t lil_global_table_base::_request_lock_IX ( lsn_t observed_tag)
private

§ _request_lock_S()

w_rc_t lil_global_table_base::_request_lock_S ( lsn_t observed_tag)
private

§ _request_lock_X()

w_rc_t lil_global_table_base::_request_lock_X ( lsn_t observed_tag)
private

§ release_locks()

void lil_global_table_base::release_locks ( bool *  lock_taken,
bool  read_lock_only = false,
lsn_t  commit_lsn = lsn_t::null 
)

Decreases the corresponding counters. This never sees an error or long blocking.

Parameters
[in]read_lock_onlyif true, releases only read locks. default false.

§ request_lock()

w_rc_t lil_global_table_base::request_lock ( lil_lock_modes_t  mode)

Requests the given mode in the lock table.

Parameters
[in]modethe lock mode to acquire

Member Data Documentation

§ _dummy1

bool lil_global_table_base::_dummy1

§ _IS_count

uint16_t lil_global_table_base::_IS_count

§ _IX_count

uint16_t lil_global_table_base::_IX_count

§ _release_version

uint32_t lil_global_table_base::_release_version

§ _S_count

uint16_t lil_global_table_base::_S_count

§ _spin_lock

tatas_lock lil_global_table_base::_spin_lock

all operations in this object are protected by this spin lock.

§ _waiter_cond

pthread_cond_t lil_global_table_base::_waiter_cond

§ _waiter_mutex

pthread_mutex_t lil_global_table_base::_waiter_mutex

§ _waiting_S

uint16_t lil_global_table_base::_waiting_S

§ _waiting_X

uint16_t lil_global_table_base::_waiting_X

§ _x_lock_tag

lsn_t lil_global_table_base::_x_lock_tag

§ _X_taken

bool lil_global_table_base::_X_taken

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