Ñò
b/Fc           @   sO   d  Z  y d d k Z Wn e j
 o d d k Z n Xd d d „  ƒ  YZ d S(   s   
Synchronization primitives:

    - reader-writer lock (preference to writers)

(Contributed to Django by eugene@lazutkin.com)
iÿÿÿÿNt   RWLockc           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s(  
    Classic implementation of reader-writer lock with preference to writers.

    Readers can access a resource simultaneously.
    Writers get an exclusive access.

    API is self-descriptive:
        reader_enters()
        reader_leaves()
        writer_enters()
        writer_leaves()
    c         C   s[   t  i ƒ  |  _ t  i d ƒ |  _ t  i d ƒ |  _ d |  _ d |  _ d |  _ d |  _	 d  S(   Ni    (
   t	   threadingt   RLockt   mutext	   Semaphoret   can_readt	   can_writet   active_readerst   active_writerst   waiting_readerst   waiting_writers(   t   self(    (    s<   /usr/local/lib/python2.6/dist-packages/django/utils/synch.pyt   __init__   s    			c         C   s‚   |  i  i ƒ  zS |  i d j o0 |  i d j o  |  i d 7_ |  i i ƒ  n |  i d 7_ Wd  |  i  i ƒ  X|  i i ƒ  d  S(   Ni    i   (   R   t   acquireR   R
   R   R   t   releaseR	   (   R   (    (    s<   /usr/local/lib/python2.6/dist-packages/django/utils/synch.pyt   reader_enters$   s     c         C   s„   |  i  i ƒ  zb |  i d 8_ |  i d j o? |  i d j o/ |  i d 7_ |  i d 8_ |  i i ƒ  n Wd  |  i  i ƒ  Xd  S(   Ni   i    (   R   R   R   R
   R   R   R   (   R   (    (    s<   /usr/local/lib/python2.6/dist-packages/django/utils/synch.pyt   reader_leaves0   s     c         C   s’   |  i  i ƒ  zc |  i d j o@ |  i d j o0 |  i d j o  |  i d 7_ |  i i ƒ  n |  i d 7_ Wd  |  i  i ƒ  X|  i i ƒ  d  S(   Ni    i   (   R   R   R   R
   R   R   R   (   R   (    (    s<   /usr/local/lib/python2.6/dist-packages/django/utils/synch.pyt   writer_enters;   s    0c         C   sÕ   |  i  i ƒ  z³ |  i d 8_ |  i d j o/ |  i d 7_ |  i d 8_ |  i i ƒ  nb |  i d j oQ |  i } d |  _ |  i | 7_ x- | d j o |  i i ƒ  | d 8} q’ Wn Wd  |  i  i ƒ  Xd  S(   Ni   i    (	   R   R   R   R
   R   R   R	   R   R   (   R   t   t(    (    s<   /usr/local/lib/python2.6/dist-packages/django/utils/synch.pyt   writer_leavesG   s     		 (   t   __name__t
   __module__t   __doc__R   R   R   R   R   (    (    (    s<   /usr/local/lib/python2.6/dist-packages/django/utils/synch.pyR       s   					(    (   R   R   t   ImportErrort   dummy_threadingR    (    (    (    s<   /usr/local/lib/python2.6/dist-packages/django/utils/synch.pyt   <module>   s
   