Проблема читателей и писателей, могу ли я внести какие-нибудь простые изменения?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Проблема читателей и писателей, могу ли я внести какие-нибудь простые изменения?

Сообщение Anonymous »


Я знаю, что авторы слишком рано снимают блокировку приоритета. Блокировка должна быть снята автором записи только в том случае, если он знает, что в очереди нет другого писателя. Например, если модуль записи сейчас выполняется в критическом состоянии, следующий модуль записи будет зависать на resources_lock. Следующий ридер также застрянет на ресурсе_lock. Поскольку и следующий писатель, и читатель теперь ждут доступа к одной и той же > одной и той же блокировке (resource_lock), ни для одного из типов потока больше не существует приоритета. Когда ресурс_lock разблокирован первым писателем, войти может как читатель, так и пишущий. Как мне решить эту проблему проще всего?
из потока импорта потока из потокового импорта Блокировка из даты и времени импорта даты и времени время импорта Priority_lock = Lock() #приоритетная блокировка reader_lock = Lock() #блокировка для читателей #writer_lock = Lock() #блокировка для писателей resources_lock = Lock() #Блокировка для РЕСУРСА читатель_счетчик = 0 ресурс = datetime.now().strftime("%H:%M:%S") класс Reader(Thread): защита запуска (сам): глобальный Reader_counter в то время как (Правда): #проверять Priority_lock.acquire() Priority_lock.release() с reader_lock: считыватель_счетчик += 1 если read_counter == 1: ресурс_lock.acquire() print("Читатель: " + ресурс) с reader_lock: считыватель_счетчик -=1 если read_counter == 0: ресурс_lock.release() время.сон(0.1) класс ReversedWriter(Поток): защита запуска (сам): глобальный ресурс пока правда: Priority_lock.acquire() Priority_lock.release() ресурс_lock.acquire() ресурс = datetime.now().strftime("%H:%M:%S") обратный = datetime.now().strftime("%S:%M:%H") print("ReversedWriter " + реверс) ресурс_lock.release() время.сон(0.1) класс Writer(Thread): защита запуска (сам): глобальный ресурс пока правда: Priority_lock.acquire() Priority_lock.release() ресурс_lock.acquire() ресурс = datetime.now().strftime("%H:%M:%S") print("Писатель" + ресурс) ресурс_lock.release() время.сон(0.1) R1 = Читатель() R2 = Читатель() R3 = Читатель() W1 = Писатель() W2 = Реверседрайтер() R1.start() R2.start() R3.start() W1.start() W2.start()
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»