o
    ib                     @   s"   d dl Z d dlZG dd dZdS )    Nc                   @   sP   e Zd Zdd Zdd Zdd Zejdd Zd	d
 Z	dd Z
ejdd ZdS )RWLockc                 C   s   t  | _t  | _d| _d S )Nr   )	threadingRLock
write_locknum_reading_locknum_readingself r
   I/home/ubuntu/.local/lib/python3.10/site-packages/einx/_src/util/rwlock.py__init__   s   


zRWLock.__init__c                 C   s^   | j " |  jd7  _| jdkr| j  W d    d S W d    d S 1 s(w   Y  d S )N   )r   r   r   acquirer   r
   r
   r   read_acquire   s   
"zRWLock.read_acquirec                 C   sl   | j dksJ | j" |  j d8  _ | j dkr$| j  W d    d S W d    d S 1 s/w   Y  d S )Nr   r   )r   r   r   releaser   r
   r
   r   read_release   s   
"zRWLock.read_releasec                 c   *    z|    d V  W |   d S |   w N)r   r   r   r
   r
   r   read   
   zRWLock.readc                 C      | j   d S r   )r   r   r   r
   r
   r   write_acquire       zRWLock.write_acquirec                 C   r   r   )r   r   r   r
   r
   r   write_release#   r   zRWLock.write_releasec                 c   r   r   )r   r   r   r
   r
   r   write&   r   zRWLock.writeN)__name__
__module____qualname__r   r   r   
contextlibcontextmanagerr   r   r   r   r
   r
   r
   r   r      s    
r   )r   r   r   r
   r
   r
   r   <module>   s    