Russian Qt Forum
Ноябрь 25, 2024, 09:29
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
непонятки с QReadWriteLock
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: непонятки с QReadWriteLock (Прочитано 2502 раз)
admsasha
Гость
непонятки с QReadWriteLock
«
:
Август 08, 2013, 13:50 »
Разбираюсь с QReadWriteLock немного не понимаю, как он поступает с unload, если я заблокировал только для чтения.
Например 10 потоков сделали блокировку (lockForRead), когда один из них выполнил unlock() что происходит ?
Если один поток в режиме чтения блокирует в течении часа, потом подошел другой поток, который хочет заблокировать в режим записи, через секунду приходит третий поток, который хочет блокировать только для чтения. Третий поток будет ждать когда второй поток выполнит свою задачу или встрянет вне очереди ?
Записан
Fregloin
Супер
Offline
Сообщений: 1025
Re: непонятки с QReadWriteLock
«
Ответ #1 :
Август 08, 2013, 14:07 »
Суть потока в том, что бы один мог писать, многие могли читать. Однако по сути тут могут многие и писать и читать одновременно.
По этому, если блокировка блокируется на чтение (т.е. будет производиться запись), то все потоки, которые захотят считать ресурс заблокируются. При освобождении блокировки, разблокируются потоки которые висят на чтении, а вот порядок их не регламентирован. Может я и ошибаюсь, но суть должна быть понятна.
Записан
admsasha
Гость
Re: непонятки с QReadWriteLock
«
Ответ #2 :
Август 08, 2013, 14:14 »
т.е. два в цикле потока которые выполняются час (блокировка для записи), с разностью запуска в 30 минут, никогда не позволят третьему потоку сделать блокировку на чтение ?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: непонятки с QReadWriteLock
«
Ответ #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
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...