ucc::rwlock Class Reference

A generic and portable implimentation of Read/Write locking. More...

#include <thread.h>

Inheritance diagram for ucc::rwlock:
Inheritance graph
[legend]
Collaboration diagram for ucc::rwlock:
Collaboration graph
[legend]

Data Structures

class  gaurd_reader
 Gaurd class to apply scope based access locking to objects. More...
class  gaurd_writer
 Gaurd class to apply scope based exclusive locking to objects. More...

Public Member Functions

 rwlock ()
 Create an instance of a rwlock.
bool modify (timeout_t timeout=Timer::inf)
 Request modify (write) access through the lock.
bool access (timeout_t timeout=Timer::inf)
 Request shared (read) access through the lock.
void release (void)
 Release the lock.
unsigned getAccess (void)
 Get the number of threads in shared access mode.
unsigned getModify (void)
 Get the number of threads waiting to modify the lock.
unsigned getWaiting (void)
 Get the number of threads waiting to access after writer completes.

Static Public Member Functions

static void indexing (unsigned size)
 Specify hash table size for gaurd protection.
static bool writer (void *object, timeout_t timeout=Timer::inf)
 Write protect access to an arbitrary object.
static bool reader (void *object, timeout_t timeout=Timer::inf)
 Shared access to an arbitrary object.
static void release (void *object)
 Release an arbitrary object that has been protected by a rwlock.
static bool modify (rwlock &lock, timeout_t timeout=Timer::inf)
 Convenience function to modify (write lock) a rwlock.
static bool access (rwlock &lock, timeout_t timeout=Timer::inf)
 Convenience function to access (read lock) a rwlock.
static void release (rwlock &lock)
 Convenience function to release a rwlock.

Detailed Description

A generic and portable implimentation of Read/Write locking.

This class impliments classical read/write locking, including "timed" locks. Support for scheduling threads to avoid writer starvation is also provided for. By building read/write locks from a conditional, we make them available on pthread implimetations and other platforms which do not normally include optional pthread rwlock's. We also do not restrict the number of threads that may use the lock. Finally, both the exclusive and shared protocols are implimented to support exclusive_lock and shared_lock referencing.

Author:
David Sugar <dyfet@gnutelephony.org>

Definition at line 517 of file thread.h.


Member Function Documentation

static bool ucc::rwlock::access ( rwlock lock,
timeout_t  timeout = Timer::inf 
) [inline, static]

Convenience function to access (read lock) a rwlock.

Parameters:
lock to access.
timeout to wait for lock.
Returns:
true if successful, false if timeout.

Definition at line 719 of file thread.h.

Here is the call graph for this function:

bool ucc::rwlock::access ( timeout_t  timeout = Timer::inf  ) 

Request shared (read) access through the lock.

Parameters:
timeout in milliseconds to wait for lock.
Returns:
true if locked, false if timeout.
unsigned ucc::rwlock::getAccess ( void   ) 

Get the number of threads in shared access mode.

Returns:
number of accessing threads.
unsigned ucc::rwlock::getModify ( void   ) 

Get the number of threads waiting to modify the lock.

Returns:
number of pending write threads.
unsigned ucc::rwlock::getWaiting ( void   ) 

Get the number of threads waiting to access after writer completes.

Returns:
number of waiting access threads.
static void ucc::rwlock::indexing ( unsigned  size  )  [static]

Specify hash table size for gaurd protection.

The default is 1. This should be called at initialization time from the main thread of the application before any other threads are created.

Parameters:
size of hash table used for gaurding.
static bool ucc::rwlock::modify ( rwlock lock,
timeout_t  timeout = Timer::inf 
) [inline, static]

Convenience function to modify (write lock) a rwlock.

Parameters:
lock to modify.
timeout to wait for lock.
Returns:
true if successful, false if timeout.

Definition at line 710 of file thread.h.

Here is the call graph for this function:

bool ucc::rwlock::modify ( timeout_t  timeout = Timer::inf  ) 

Request modify (write) access through the lock.

Parameters:
timeout in milliseconds to wait for lock.
Returns:
true if locked, false if timeout.
static bool ucc::rwlock::reader ( void *  object,
timeout_t  timeout = Timer::inf 
) [static]

Shared access to an arbitrary object.

This is based on the protect function of mutex.

Parameters:
object to share.
timeout in milliseconds to wait for lock.
Returns:
true if shared, false if timeout.
static void ucc::rwlock::release ( rwlock lock  )  [inline, static]

Convenience function to release a rwlock.

Parameters:
lock to release.

Definition at line 726 of file thread.h.

Here is the call graph for this function:

static void ucc::rwlock::release ( void *  object  )  [static]

Release an arbitrary object that has been protected by a rwlock.

Parameters:
object to release.
static bool ucc::rwlock::writer ( void *  object,
timeout_t  timeout = Timer::inf 
) [static]

Write protect access to an arbitrary object.

This is like the protect function of mutex.

Parameters:
object to protect.
timeout in milliseconds to wait for lock.
Returns:
true if locked, false if timeout.

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

Generated by  doxygen 1.6.2