|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Май 5, 2004 01:19:14 · Поправил: PavPS Всем привет! После прочтения статьи Four-F окончательно решился задать вопрос об этом звере :) Вопрос касательно тонкости, связанной с снисходительным обращением с собственной нитью. IF какая-то нить создает(инициализирует) Mutex, то OwnerThread заполняется, соответственно, идентификатором этого потока. В вышеупомянутой статье всё гладко – на это не падает, т.к. driveentry, которая вып-ся потоком, запускающем драйвер (если не ошибаюсь) заполняет структуру Mutex??? , а ждут этот Mutex другие созданные нити. А если синхронизация нужна уже на момент вып-я DriveEntry , то создавая объект Mutex в DriveEntry, получаем такой эффект: все(нити, так же созданные) ждут объекта, а поток DriveEntry проходит мимо Wait «нахаляву» => получаем «плохой» исход. Таперча долгожданный риторический вопрос: «Что делать???». Не создавать же в отдельном потоке-комикадзе и убивать его потом. Я нашел другую дорогу – у Event-а таких заморочек нет. Но все же хотелось бы Mutex! Заранее благодарен. --==ППС==-- |
|
|
Дата: Май 5, 2004 15:04:22 [ PavPS: IF какая-то нить создает(инициализирует) Mutex, то OwnerThread заполняется, соответственно, идентификатором этого потока. ] OwnerThread заполняется не идентификатором, а указателем на обоъект "поток". При инициализации (KeInitializeMutex) это поле не заполняется. OwnerThread заполняет KeWaitForMutexObject, когда поток захватывает мьютекс, т.е. этот поток становится владельцем мьютекса. [ PavPS: т.к. driveentry, которая вып-ся потоком, запускающем драйвер (если не ошибаюсь) ] Ошибаешься. DriveEntry выполняется системным потоком. См. "Часть 5: Полнофункциональный драйвер" - там табличка в конце есть. ЗЫ: Вопрос прочитал три раза, но ничего не понял :( Единственный грамотно сформулированный вопрос - это «Что делать???» ;))) |
|
|
Дата: Май 5, 2004 23:05:16 Про driveentry-это так, - празники были, позабыл :))) Пока писал ответ с подробными разъяснениями, блин, сам и разобрался. :) Заморачивалсято я на том, что последовательно вызавал сначала 1 раз инициализацию и 2 раза ожмдание мутанта подряд, и получал, что на второй раз он пролетал мимо wait. Знал, что для своего потока все подругому, но не знал, что этот злощастный OwnerThread заполняется при Wait-фии, а не при KeInit... вот типа и всё. Извиняйте. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.076 |