Russian Qt Forum
Ноябрь 25, 2024, 09:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: непонятки с QReadWriteLock  (Прочитано 2502 раз)
admsasha
Гость
« : Август 08, 2013, 13:50 »

Разбираюсь с QReadWriteLock немного не понимаю, как он поступает с unload, если я заблокировал только для чтения.

Например 10 потоков сделали блокировку (lockForRead), когда один из них выполнил unlock() что происходит ?

Если один поток в режиме чтения блокирует в течении часа, потом подошел другой поток, который хочет заблокировать в режим записи, через секунду приходит третий поток, который хочет блокировать только для чтения. Третий поток будет ждать когда второй поток выполнит свою задачу или встрянет вне очереди ?
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #1 : Август 08, 2013, 14:07 »

Суть потока в том, что бы один мог писать, многие могли читать. Однако по сути тут могут многие и писать и читать одновременно.
По этому, если блокировка блокируется на чтение (т.е. будет производиться запись), то все потоки, которые захотят считать ресурс заблокируются. При освобождении блокировки, разблокируются потоки которые висят на чтении, а вот порядок их не регламентирован. Может я и ошибаюсь, но суть должна быть понятна.
Записан
admsasha
Гость
« Ответ #2 : Август 08, 2013, 14:14 »

т.е. два в цикле потока которые выполняются час (блокировка для записи), с разностью запуска в 30 минут, никогда не позволят третьему потоку сделать блокировку на чтение ?

Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Август 08, 2013, 15:06 »

Нельзя писать пока хоть один читает. Но запрос чтения будет ждать если есть запрос на запись. Пример

Интервал 13:00 - 14:00 (нитки 1, 2, 3 читают)
13:01 - нитка 4 хочет писать, будет ждать до 14:00 пока не останется ни одного читающего
13:30 - нитка 5 хочет читать. Будет ждать пока нитка 4 захватит запись (в 14:00) и более пока запись не завершена и нитка 4 не освободит лок. Если в течение этого времени будут еще запросы на запись - пока все писатели не отстреляются
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.255 секунд. Запросов: 22.