IntrOS
Loading...
Searching...
No Matches
Read/write lock

read/write locks More...

Macros

#define OS_RWL(rwl)
 define and initialize a read/write lock object
#define static_RWL(rwl)
 static alias of OS_RWL()
#define RWL_INIT()
 create and initialize a read/write lock object
#define RWL_CREATE()
 create and initialize a read/write lock object
#define RWL_NEW   RWL_CREATE
 alias of RWL_CREATE()

Functions

void rwl_init (rwl_t *rwl)
 initialize a read/write lock object
void rwl_reset (rwl_t *rwl)
 reset the read/write lock object and wake up all waiting tasks with 'E_STOPPED' event value
void rwl_kill (rwl_t *rwl)
 alias of rwl_reset()
int rwl_takeRead (rwl_t *rwl)
 try to lock the reader, don't wait if the reader can't be locked immediately
int rwl_tryLockRead (rwl_t *rwl)
 alias of rwl_takeRead()
int rwl_waitReadFor (rwl_t *rwl, cnt_t delay)
 try to lock the reader, wait for given duration of time if the reader can't be locked immediately
int rwl_waitReadUntil (rwl_t *rwl, cnt_t time)
 try to lock the reader, wait until given timepoint if the reader can't be locked immediately
int rwl_waitRead (rwl_t *rwl)
 try to lock the reader, wait indefinitely if the reader can't be locked immediately
int rwl_lockRead (rwl_t *rwl)
 alias of rwl_waitRead()
void rwl_giveRead (rwl_t *rwl)
 unlock the reader
void rwl_unlockRead (rwl_t *rwl)
 alias of rwl_giveRead()
int rwl_takeWrite (rwl_t *rwl)
 try to lock the writer, don't wait if the writer can't be locked immediately
int rwl_tryLockWrite (rwl_t *rwl)
 alias of rwl_takeWrite()
int rwl_waitWriteFor (rwl_t *rwl, cnt_t delay)
 try to lock the writer, wait for given duration of time if the writer can't be locked immediately
int rwl_waitWriteUntil (rwl_t *rwl, cnt_t time)
 try to lock the writer, wait until given timepoint if the writer can't be locked immediately
int rwl_waitWrite (rwl_t *rwl)
 try to lock the writer, wait indefinitely if the writer can't be locked immediately
int rwl_lockWrite (rwl_t *rwl)
 alias of rwl_waitWrite()
void rwl_giveWrite (rwl_t *rwl)
 unlock the writer
void rwl_unlockWrite (rwl_t *rwl)
 alias of rwl_giveWrite()

Detailed Description

read/write locks

Macro Definition Documentation

◆ OS_RWL

#define OS_RWL ( rwl)
Value:
rwl_t rwl[] = { _RWL_INIT() }

define and initialize a read/write lock object

Parameters
rwlname of a pointer to read/write lock object

◆ static_RWL

#define static_RWL ( rwl)
Value:
static rwl_t rwl[] = { _RWL_INIT() }

static alias of OS_RWL()

◆ RWL_INIT

#define RWL_INIT ( )
Value:
_RWL_INIT()

create and initialize a read/write lock object

Returns
read/write lock object
Note
use only in 'C' code

◆ RWL_CREATE

#define RWL_CREATE ( )
Value:
{ RWL_INIT () }
#define RWL_INIT()
create and initialize a read/write lock object
Definition osrwlock.h:102

create and initialize a read/write lock object

Returns
read/write lock object as array (id)
Note
use only in 'C' code

Function Documentation

◆ rwl_init()

void rwl_init ( rwl_t * rwl)

initialize a read/write lock object

Parameters
rwlpointer to read/write lock object

◆ rwl_reset()

void rwl_reset ( rwl_t * rwl)

reset the read/write lock object and wake up all waiting tasks with 'E_STOPPED' event value

Parameters
rwlpointer to read/write lock object
Note
use only in thread mode

◆ rwl_takeRead()

int rwl_takeRead ( rwl_t * rwl)

try to lock the reader, don't wait if the reader can't be locked immediately

Parameters
rwlpointer to read/write lock object
Return values
E_SUCCESSreader was successfully locked
E_TIMEOUTreader can't be locked immediately, try again

◆ rwl_waitReadFor()

int rwl_waitReadFor ( rwl_t * rwl,
cnt_t delay )

try to lock the reader, wait for given duration of time if the reader can't be locked immediately

Parameters
rwlpointer to read/write lock object
delayduration of time (maximum number of ticks to wait for lock the reader)
  • IMMEDIATE: don't wait if the reader can't be locked immediately
  • INFINITE: wait indefinitely until the reader has been locked
Return values
E_SUCCESSreader was successfully locked
E_STOPPEDreader was reseted before the specified timeout expired
E_TIMEOUTreader was not locked before the specified timeout expired

◆ rwl_waitReadUntil()

int rwl_waitReadUntil ( rwl_t * rwl,
cnt_t time )

try to lock the reader, wait until given timepoint if the reader can't be locked immediately

Parameters
rwlpointer to read/write lock object
timetimepoint value
Return values
E_SUCCESSreader was successfully locked
E_STOPPEDreader was reseted before the specified timeout expired
E_TIMEOUTreader was not locked before the specified timeout expired

◆ rwl_waitRead()

int rwl_waitRead ( rwl_t * rwl)
inline

try to lock the reader, wait indefinitely if the reader can't be locked immediately

Parameters
rwlpointer to read/write lock object
Return values
E_SUCCESSreader was successfully locked
E_STOPPEDreader was reseted

◆ rwl_giveRead()

void rwl_giveRead ( rwl_t * rwl)

unlock the reader

Parameters
rwlpointer to read/write lock object

◆ rwl_takeWrite()

int rwl_takeWrite ( rwl_t * rwl)

try to lock the writer, don't wait if the writer can't be locked immediately

Parameters
rwlpointer to read/write lock object
Return values
E_SUCCESSwriter was successfully locked
E_TIMEOUTwriter can't be locked immediately, try again

◆ rwl_waitWriteFor()

int rwl_waitWriteFor ( rwl_t * rwl,
cnt_t delay )

try to lock the writer, wait for given duration of time if the writer can't be locked immediately

Parameters
rwlpointer to read/write lock object
delayduration of time (maximum number of ticks to wait for lock the writer)
  • IMMEDIATE: don't wait if the writer can't be locked immediately
  • INFINITE: wait indefinitely until the writer has been locked
Return values
E_SUCCESSwriter was successfully locked
E_STOPPEDwriter was reseted before the specified timeout expired
E_TIMEOUTwriter was not locked before the specified timeout expired

◆ rwl_waitWriteUntil()

int rwl_waitWriteUntil ( rwl_t * rwl,
cnt_t time )

try to lock the writer, wait until given timepoint if the writer can't be locked immediately

Parameters
rwlpointer to read/write lock object
timetimepoint value
Return values
E_SUCCESSwriter was successfully locked
E_STOPPEDwriter was reseted before the specified timeout expired
E_TIMEOUTwriter was not locked before the specified timeout expired

◆ rwl_waitWrite()

int rwl_waitWrite ( rwl_t * rwl)
inline

try to lock the writer, wait indefinitely if the writer can't be locked immediately

Parameters
rwlpointer to read/write lock object
Return values
E_SUCCESSwriter was successfully locked
E_STOPPEDwriter was reseted

◆ rwl_giveWrite()

void rwl_giveWrite ( rwl_t * rwl)

unlock the writer

Parameters
rwlpointer to read/write lock object