我正在使用 2.6.24.3 内核为嵌入式 Linux 项目开发用户空间应用程序。我的应用程序通过创建 2 个 pthreads 在两个文件节点之间传递数据,每个 pthreads 都休眠直到异步 IO 操作完成,此时它唤醒并运行完成处理程序。
完成处理程序需要跟踪有多少传输未决,并维护一些链表,一个线程将添加到另一个线程将删除这些链表。
// 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?