| 116 | self.__rw_lock.writer_release() |
| 117 | |
| 118 | class Reader(threading.Thread): |
| 119 | def __init__(self, buffer_, rw_lock, init_sleep_time, sleep_time): |
| 120 | """ |
| 121 | @param buffer_: common buffer shared by the readers and writers |
| 122 | @type buffer_: list |
| 123 | @type rw_lock: L{RWLock} |
| 124 | @param init_sleep_time: sleep time before doing any action |
| 125 | @type init_sleep_time: C{float} |
| 126 | @param sleep_time: sleep time while in critical section |
| 127 | @type sleep_time: C{float} |
| 128 | """ |
| 129 | threading.Thread.__init__(self) |
| 130 | self.__buffer = buffer_ |
| 131 | self.__rw_lock = rw_lock |
| 132 | self.__init_sleep_time = init_sleep_time |
| 133 | self.__sleep_time = sleep_time |
| 134 | self.buffer_read = None |
| 135 | """a copy of a the buffer read while in critical section""" |
| 136 | self.entry_time = None |
| 137 | """Time of entry to the critical section""" |
| 138 | self.exit_time = None |
| 139 | """Time of exit from the critical section""" |
| 140 | |
| 141 | def run(self): |
| 142 | time.sleep(self.__init_sleep_time) |
| 143 | self.__rw_lock.reader_acquire() |
| 144 | self.entry_time = time.time() |
| 145 | time.sleep(self.__sleep_time) |
| 146 | self.buffer_read = copy.deepcopy(self.__buffer) |
| 147 | self.exit_time = time.time() |
| 148 | self.__rw_lock.reader_release() |
| 149 | |
| 150 | class RWLockTestCase(unittest.TestCase): |
| 151 | def test_readers_nonexclusive_access(self): |
no outgoing calls