Название: непонятки с QReadWriteLock Отправлено: admsasha от Август 08, 2013, 13:50 Разбираюсь с QReadWriteLock немного не понимаю, как он поступает с unload, если я заблокировал только для чтения.
Например 10 потоков сделали блокировку (lockForRead), когда один из них выполнил unlock() что происходит ? Если один поток в режиме чтения блокирует в течении часа, потом подошел другой поток, который хочет заблокировать в режим записи, через секунду приходит третий поток, который хочет блокировать только для чтения. Третий поток будет ждать когда второй поток выполнит свою задачу или встрянет вне очереди ? Название: Re: непонятки с QReadWriteLock Отправлено: Fregloin от Август 08, 2013, 14:07 Суть потока в том, что бы один мог писать, многие могли читать. Однако по сути тут могут многие и писать и читать одновременно.
По этому, если блокировка блокируется на чтение (т.е. будет производиться запись), то все потоки, которые захотят считать ресурс заблокируются. При освобождении блокировки, разблокируются потоки которые висят на чтении, а вот порядок их не регламентирован. Может я и ошибаюсь, но суть должна быть понятна. Название: Re: непонятки с QReadWriteLock Отправлено: admsasha от Август 08, 2013, 14:14 т.е. два в цикле потока которые выполняются час (блокировка для записи), с разностью запуска в 30 минут, никогда не позволят третьему потоку сделать блокировку на чтение ?
Название: Re: непонятки с QReadWriteLock Отправлено: Igors от Август 08, 2013, 15:06 Нельзя писать пока хоть один читает. Но запрос чтения будет ждать если есть запрос на запись. Пример
Интервал 13:00 - 14:00 (нитки 1, 2, 3 читают) 13:01 - нитка 4 хочет писать, будет ждать до 14:00 пока не останется ни одного читающего 13:30 - нитка 5 хочет читать. Будет ждать пока нитка 4 захватит запись (в 14:00) и более пока запись не завершена и нитка 4 не освободит лок. Если в течение этого времени будут еще запросы на запись - пока все писатели не отстреляются |