¿Puedo evitar que un subproceso de espacio de usuario de Linux produzca código crítico?

Estoy trabajando en una aplicación de espacio de usuario para un proyecto de Linux integrado usando el kernel 2.6.24.3. Mi aplicación pasa datos entre dos nodos de archivos creando 2 subprocesos p que se suspenden hasta que se completa una operación de E / S asíncrona, momento en el que se activa y ejecuta un controlador de finalización.

Los controladores de finalización deben realizar un seguimiento de cuántas transferencias están pendientes y mantener un puñado de listas vinculadas a las que se agregará un hilo y se eliminará el otro.

// 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);
    }
}

Mi pregunta es esta ...

¿Hay alguna manera simple de evitar que el hilo actualmente activo ceda mientras ejecuta el controlador de finalización en lugar de ir por la ruta de bloqueo de mutex / giro?

¿O si no se puede configurar Linux para evitar que se produzca un subproceso cuando se mantiene un bloqueo mutex / spin?

Respuestas a la pregunta(3)

Su respuesta a la pregunta