Как сохранить поток на процессоре, пока не произойдет событие? - PullRequest
0 голосов
/ 12 октября 2011

Я порождаю несколько потоков внутри вызова ioctl для моего драйвера. Я также назначаю привязку ядра к своему драйверу. Я хочу убедиться, что один поток не запланирован, пока конкретное событие не будет помечено другим потоком. Есть ли способ, чтобы не позволить планировщик Windows для контекста из моего потока. Использование _disable () может привести к зависанию системы, так как событие может занять пару секунд.

Окружающая среда Windows 7,64bit

Спасибо,

1 Ответ

2 голосов
/ 13 октября 2011

То, что вы, вероятно, после того, как вращение блокировки. Однако это, вероятно, плохая идея, если вы не можете гарантировать, что ваш драйвер / приложение всегда будет работать на многопроцессорной системе, даже тогда это все еще очень плохая практика. В однопроцессорной системе, если вращение потока блокируется, тогда другой поток, сигнализирующий о том, что вращение потока заблокировано, никогда не будет запланировано и поэтому не может сигнализировать о вашем событии. Спин-замки предназначены для экономного использования и только в том случае, если блокировка выполняется очень короткое время, а не пару секунд. Похоже, вам нужно использовать событие или другой сигнальный механизм для синхронизации ваших потоков и позволить планировщику Windows выполнять свою работу. Если вам нужно очень быстро отреагировать на событие, тогда вместо него можно использовать прерывания или отложенный вызов процедуры (DPC).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...