Этот вопрос является продолжением ранее заданного вопроса:
Медленная связь с использованием общей памяти между пользовательским режимом и ядром
Я запускаю поток в ядре Windows, взаимодействующий с приложением через общую память. Мне интересно, является ли нынешний способ зацикливания и ожидания изменения переменной BOOLEAN наиболее эффективным? Требуется снизить его до 50-100 микросекунд или ниже, если это возможно.
КОД ЯДРА
typedef struct _SHARED_MEMORY
{
BOOLEAN mutex;
CHAR data[BUFFER_SIZE];
} SHARED_MEMORY, *PSHARED_MEMORY;
ZwCreateSection(...)
ZwMapViewOfSection(...)
while (TRUE) {
if (((PSHARED_MEMORY)SharedSection)->mutex == TRUE) {
//... do work...
((PSHARED_MEMORY)SharedSection)->mutex = FALSE;
}
KeDelayExecutionThread(KernelMode, FALSE, &PollingInterval);
}
Я рассмотрел KeStallExecutionProcessor, поскольку он должен использоваться для циклов менее 50 микросекунд, но, насколько я понимаю, он все еще потребляет ресурсы процессора.
Кроме того, поскольку BOOLEAN используется нестабильно, вы видите какие-либо недостатки или проблемы с текущей процедурой чтения / записи?
Возможно, изменить приоритет потока на низкий?