Могу ли я предотвратить сдвиг пользовательского пространства Linux в критический код?

Я работаю над приложением пользовательского пространства для встроенного проекта Linux, использующего ядро ​​2.6.24.3. Мое приложение передает данные между двумя файловыми узлами, создавая 2 pthread, каждый из которых находится в спящем режиме, до тех пор, пока не завершится асинхронная операция ввода-вывода, после чего оно запускается и запускает обработчик завершения.

Обработчики завершения должны отслеживать количество ожидающих передач и поддерживать несколько связанных списков, которые один поток добавит, а другой удалит.

// sleep here until events arrive or time out expires
for(;;) {
    no_of_events = io_getevents(ctx, 1, num_events, events, &timeout);
    // Process each aio event that has completed or thrown an error
    for (i=0; i<no_of_events; i++) {
        // Get pointer to completion handler
        io_complete = (io_callback_t) events[i].data;
        // Get pointer to data object
        iocb = (struct iocb *) events[i].obj;
        // Call completion handler and pass it the data object
        io_complete(ctx, iocb, events[i].res, events[i].res2);
    }
}

У меня вопрос такой ...

Есть ли простой способ предотвратить выход текущего активного потока, пока он запускает обработчик завершения, а не идти по маршруту блокировки мьютекса / вращения?

Или не удается настроить Linux так, чтобы он не выдавал pthread при удержании блокировки мьютекса / вращения?

Ответы на вопрос(3)

Ваш ответ на вопрос