我正在使用posix线程并且有一个workerRoutine,在某些情况下必须等待I / O.
//WorkerRoutine
while(true){
if(NO CURRENT WORK){
//sleep for I/O
continue;
}
//Other cases....
}
我的I / O功能更新了一个静态大小的列表。我的问题是,当一个工人没有当前工作时,正忙着等待。我想在worker函数中使用sleep函数,在readList(I / O)函数中使用wake函数。在C中执行此操作的最佳方法是什么?
答案 0 :(得分:8)
最接近Java的wait
和notify
方法的pthreads可用作接受条件变量的函数。设置条件变量,调用pthread_cond_wait
等待工作,pthread_cond_signal
宣布工作可用。
可以轻松找到使用示例on StackOverflow.和elsewhere。
如果您正在等待IO,另一种可能性是使用poll
或等效数据来睡眠,直到数据到达。