Может кто подскажет, как реализовано это дело на пальцах? На флагах руками или средствами ОС специяльными? :-) И насколько допустимо в таки вопромах полагаться на свои флаги /счетчики, если работа с ними всыделена в CriticalSection?
Вот что на пионе получилось: class _locked: def __init__(self, *L, **D): self.lock, self.read_lock_counter = thread.allocate_lock(), 0 ..... def _run_under_read_lock(self, func, L, D) : self.lock.acquire() self.read_lock_counter += 1 self.lock.release() try: return apply(func, L, D) finally: self.read_lock_counter -= 1 def _run_under_full_lock(self, func, L, D) : self.lock.acquire() while self.read_lock_counter > 0 : pass try: return apply(func, L, D) finally: self.lock.release() .....
