o
    پi                     @   s6   d dl Z G dd dZG dd dZG dd dZdS )    Nc                   @   sT   e Zd Zdd Zedd Zedd Zdd Zd	d
 Zdd Z	dd Z
dd ZdS )RWLockc                 C   s.   t  | _t | j| _d| _d| _d| _d S )Nr   F)asyncioLock_lock	Condition_cond_readers_writer_active_waiting_writersself r   O/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/utils/aio_rwlock.py__init__   s
   

zRWLock.__init__c                 C      t | S )z
        A context manager for acquiring a shared (reader) lock.

        Example:
            async with rwlock.reader_lock:
                # read-only access
        )_ReaderLockr   r   r   r   reader_lock      	zRWLock.reader_lockc                 C   r   )z
        A context manager for acquiring an exclusive (writer) lock.

        Example:
            async with rwlock.writer_lock:
                # exclusive access
        )_WriterLockr   r   r   r   writer_lock    r   zRWLock.writer_lockc              	      s   | j 4 I d H + | js| jdkr!| j I d H  | js| jdks|  jd7  _W d   I d H  d S 1 I d H s9w   Y  d S )Nr      )r   r	   r
   r   waitr   r   r   r   r   acquire_reader+   s   .zRWLock.acquire_readerc              	      sz   | j 4 I d H ( |  jd8  _| jdkr%| j  W d   I d H  d S W d   I d H  d S 1 I d H s6w   Y  d S )Nr   r   )r   r   r   
notify_allr   r   r   r   release_reader3   s   
.zRWLock.release_readerc              
      s   | j 4 I d H @ |  jd7  _z$| js| jdkr)| j I d H  | js| jdksd| _W |  jd8  _n|  jd8  _w W d   I d H  d S 1 I d H sNw   Y  d S )Nr   r   T)r   r
   r	   r   r   r   r   r   r   r   acquire_writer;   s   ".zRWLock.acquire_writerc              	      sR   | j 4 I d H  d| _| j  W d   I d H  d S 1 I d H s"w   Y  d S )NF)r   r	   r   r   r   r   r   r   release_writerH   s
   .zRWLock.release_writerc              	      sP   | j 4 I d H  | jp| jdkW  d   I d H  S 1 I d H s!w   Y  d S )Nr   )r   r	   r   r   r   r   r   	is_lockedN   s   0zRWLock.is_lockedN)__name__
__module____qualname__r   propertyr   r   r   r   r   r   r   r   r   r   r   r      s    



r   c                   @   *   e Zd ZdefddZdd Zdd ZdS )	r   rwlockc                 C   
   || _ d S N_rwlockr   r#   r   r   r   r   T      
z_ReaderLock.__init__c                       | j  I d H  | S r%   )r'   r   r   r   r   r   
__aenter__W      z_ReaderLock.__aenter__c                       | j  I d H  d S r%   )r'   r   r   exc_typeexc_valexc_tbr   r   r   	__aexit__[      z_ReaderLock.__aexit__Nr   r   r    r   r   r+   r2   r   r   r   r   r   S       r   c                   @   r"   )	r   r#   c                 C   r$   r%   r&   r(   r   r   r   r   `   r)   z_WriterLock.__init__c                    r*   r%   )r'   r   r   r   r   r   r+   c   r,   z_WriterLock.__aenter__c                    r-   r%   )r'   r   r.   r   r   r   r2   g   r3   z_WriterLock.__aexit__Nr4   r   r   r   r   r   _   r5   r   )r   r   r   r   r   r   r   r   <module>   s    O