Skip to main content

A python implementation of the three Reader-Writer problems.

Project description

Reader Writer Lock

A python implementation of a solution for the three Reader-Writer problems.

repo status Active Build Status Coverage Status BugTracker

Python Version Pypi Version

Code size in bytes License

Downloads Downloads Downloads pyReaderWriterLock_repo_star

Not only does it implement the reader-writer problems, it is also compliant with the python lock interface which among others include support for timeout.

For reading about the theory behind the reader-writer problems refer to Wikipedia.


Install the python package readerwriterlock

python3 -m pip install -U readerwriterlock


  1. Choose a rwlock class base on your access priority need and feature need which is going to be use by the threads:
Priority +Speed +Downgradable*
Reader priority (aka First readers-writers problem) RWLockRead RWLockReadD
Writer priority (aka Second readers-writers problem) RWLockWrite RWLockWriteD
Fair priority (aka Third readers-writers problem) RWLockFair RWLockFairD

* Downgradable feature allows the locks to be atomically downgraded from being locked in write-mode to locked in read-mode

ⓘ Downgradable classes come with a theoretical ~20% negative effect on performance for acquiring and releasing locks.

  1. Instantiate an instance of the chosen RWLock class:
from readerwriterlock import rwlock
a = rwlock.RWLockFairD()
  1. Generate read locks and write locks using the following methods:
      a_reader_lock = a.gen_rlock()

      a_writer_lock = a.gen_wlock()
  1. Use the generated read/write locks to protect section in your code:

Pythonic usage example

with a.gen_rlock():
  #Read stuff

with a.gen_wlock():
  #Write stuff

Use case (Timeout) example

b = a.gen_wlock()
if b.acquire(blocking=True, timeout=5):
    #Do stuff

Use case (Downgrade) example

b = a.gen_wlock()
if b.acquire():
        #Read/Write stuff
        b = b.downgrade()
        #Read stuff

Live example

Refer to the file which has above 90% line coverage of

The tests can be initiated by doing

make check.test.coverage


Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

readerwriterlock-1.0.9.tar.gz (16.6 kB view hashes)

Uploaded source

Built Distribution

readerwriterlock-1.0.9-py3-none-any.whl (10.0 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page