Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Драйвер и многопоточное приложение.  (Прочитано 7045 раз)
0 Пользователей и 1 Гость смотрят эту тему.
student
Гость
« : 14-05-2006 20:45 » 

Нужно написать приложение, которое в одном потоке читает/пишет данные, а в другом ждет прерывание и в случае прихода обрабатывает его. Вопрос: Должен ли я в драйвере(драйвер мой) как-то учитывать, что буду работать с ним в нескольких потоках?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 15-05-2006 11:01 » 

1. на уровне обращения независимых процессов к общим ресурсам - да;) рекомендуются для синхронизации: мьютексы, семафоры, Interloked и SpinLock функции.
2. когда создается объект драйвера - ему можно дать флаг, что открыть его handle(CreateFile) может только одно приложение, хотя вы не это наверное спрашивали)
« Последнее редактирование: 15-05-2006 11:06 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
IRP
Постоялец

ua
Offline Offline

« Ответ #2 : 16-05-2006 09:44 » 

Все зависит от функциональности и архитектуры которую ты заложишь в драйвер. Если с драйвером могут работать несколько потоков одновременно (писать или читать) то я думаю здесь нужна синхронизация.
Как я понимаю проблемма в следующем. Обрабатывается прерывание и чего то сохраняет вы буффер, выставляет event для приложения и завершает обработку. Приложение услышав event забирает эти данные. Если это так на самом деле - то я думаю что нужно предусмотреть синхронизацию при обращение к буферу из обработчика прерываний с высоким IRQL и обращения к буферу их DISPATH_ROUTINE твоего драйвер с более низким IRQL. В зависимости от значений IRQL правильно выбери объект синхронизации!
Записан
student
Гость
« Ответ #3 : 16-05-2006 15:08 » 

Спасибо. Пишу и читаю я через ReadFile Writefile. и у меня есть специальный буффер для передачи данных из DpcForIsr пользовательскому приложению. DpsForIsr сигнализирует приложению через event. И приложение через DeviceIoControl читает данные из драйвера(буфера). Вопрос: Пересекаются ли эти буферы?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 16-05-2006 15:15 » 

не понял?)))
кто туда пишет и кто из него читатет?)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
IRP
Постоялец

ua
Offline Offline

« Ответ #5 : 17-05-2006 07:19 » 

Все зависит от того как ты работаешь с этим буфером из DpsForIsr.
Если при добавлении новых данных выделяешь постоянно новый буфер - а потом вычитываешь его и возвращаешь память системе - то тогда не обязательно синхронизировать. Если буфер единый - то тут нужна синхронизация.
В общем все зависит от конкретной реализации. Если распишешь подробнее схему работы - может быть смогу сказать поконкретней.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines