|
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
|
||||||
Читатели - писатели17.05.2013, 00:54. Показов 9956. Ответов 7
Метки нет (Все метки)
Всем доброй ночи!
Готовлюсь сдавать преподавателю тему читатели-писатели, которую нам дали на самостоятельное изучение. Нужна ваша критика моего кода. Работает как-то не очень красиво, 90% работы выполняет писатель, хотя он один. Подскажите, где я затупил? Кликните здесь для просмотра всего текста
0
|
||||||
| 17.05.2013, 00:54 | |
|
Ответы с готовыми решениями:
7
Читатели-писатели
Писатели |
|
Ушел с форума
|
|
| 17.05.2013, 10:09 | |
|
Проблема читателей-писателей обычно заключается в том, чтобы иметь несколько читателей,
которые не блокировали бы друг друга, и одного (или нескольких) писателей, которые могли бы писать лишь поодиночке. Данный код этому условию не удовлетворяет: поскольку и читатели, и писатели захватывают hWriterMutex, в один момент времени лишь один поток может иметь доступ к очереди. То есть, это не "single writer multiple reader", а обычная блокировка. С таким же успехом можно было бы использовать вместо мьютекса и семафора критическую секцию, и код получился бы проще и даже быстрее.
1
|
|
|
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
|
|
| 17.05.2013, 14:09 [ТС] | |
|
Убежденный, подскажите, пожалуйста, алгоритм на псевдо-языке. Я нигде не могу найти понятный мне.
0
|
|
|
Ушел с форума
|
|
| 17.05.2013, 15:15 | |
|
То, что Вам нужно, более известно под названием "Readers-Writers Locks".
Частный случай - "single writer multiple readers", иллюстрацию с примером можно найти в книге Дж. Рихтера "Программирование для профессионалов: создание эффективных Win32-приложений с учетом специфики 64-битной версии Windows", глава "полезные средства синхронизации". Только ищите старое издание, в новых изданиях эта проблема рассматривается в контексте использования функций, появившихся в Windows Vista, а это не совсем то, что нужно. Еще советую поискать информацию про паттерн "read copy update" (RCU), он в различных вариациях встречается в большом количестве кода и при определенных условиях может дать очень хорошие результаты. Ну а если размер охраняемой секции невелик, а потоки быстро входят в нее и сразу же покидают, тогда нет смысла использовать такие "тяжелые" объекты, как мьютекс или семафор, здесь обычный спин-лок может оказаться в разы эффективнее. И напоследок. Перед тем, как звать методы класса в нескольких потоках одновременно, полезно уточнить в документации, насколько это потокобезопасно. STL-контейнеры из поставки Visual C++ потокобезопасны только на чтение, а для других платформ и компиляторов все может оказаться еще хуже, и тогда применять "readers-writers locks" вообще станет невозможно.
1
|
|
|
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
|
||||||
| 18.05.2013, 15:36 [ТС] | ||||||
|
Немного переделал, но все равно работает так, что все время видим только писателей. Читатель берет работу только 1 раз в лучшем случае. Посоветуете что-нибудь?
Кликните здесь для просмотра всего текста
0
|
||||||
|
Ушел с форума
|
||||||
| 19.05.2013, 17:08 | ||||||
|
Этот код некорректен.
Ничто не мешает потоку-писателю записывать в SharedQueue одновременно с ее чтением потоками-читателями:
ведь семафор может быть захвачен несколькими потоками. Так что здесь писатель получает такие же права, как и писатели.
0
|
||||||
|
6 / 6 / 1
Регистрация: 14.05.2013
Сообщений: 43
|
|
| 23.05.2013, 11:09 | |
|
Можно у вас уточнить, вы обсуждаете синхронизацию с точки зрения целостности (актуальности) данных? Влияет ли одновременное чтение файла из одного потока и запись в файл из другого потока на само создание файла? Т.е. например есть файл file.txt из которого читают и одновременно могут в него писать, может ли это привести что после записи создастся файл с другим именем file.tx, file.t0, file.0 нужно ли их синхронизировать(потоки)?
0
|
|
|
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
|
|
| 24.05.2013, 01:46 [ТС] | |
|
Нет, мы обсуждаем алгоритм. Для простоты в качестве общего ресурса я использую массив, т.к. контейнер STL (query) потоконебезопасен.
0
|
|
| 24.05.2013, 01:46 | |
|
Помогаю со студенческими работами здесь
8
Пишу бизнес-книгу, требуются первые читатели!
Отфильтровать таблицу Выдача_книг так, чтобы остались читатели которые просрочили сдачу книг Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|