Can I prevent a Linux user space pthread yielding in critical code?

Posted by KermitG on Stack Overflow See other posts from Stack Overflow or by KermitG
Published on 2010-05-19T11:32:34Z Indexed on 2010/05/19 13:30 UTC
Read the original article Hit count: 258

I am working on an user space app for an embedded Linux project using the 2.6.24.3 kernel. My app passes data between two file nodes by creating 2 pthreads that each sleep until a asynchronous IO operation completes at which point it wakes and runs a completion handler.

The completion handlers need to keep track of how many transfers are pending and maintain a handful of linked lists that one thread will add to and the other will remove.

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

My question is this...

Is there a simple way I can prevent the currently active thread from yielding whilst it runs the completion handler rather than going down the mutex/spin lock route?

Or failing that can Linux be configured to prevent yielding a pthread when a mutex/spin lock is held?

© Stack Overflow or respective owner

Related posts about linux

Related posts about embedded-linux