是否存在C等效的Java Waits和Notify?

Dan*_*iel 2 c pthreads

我正在使用posix线程并且有一个workerRoutine,在某些情况下必须等待I/O.

//WorkerRoutine
while(true){
    if(NO CURRENT WORK){
      //sleep for I/O
      continue;
    }
    //Other cases....
}
Run Code Online (Sandbox Code Playgroud)

我的I/O功能更新了一个静态大小的列表.我的问题是,当一个工人没有当前工作时,正忙着等待.我想在worker函数中使用sleep函数,在readList(I/O)函数中使用wake函数.在C中执行此操作的最佳方法是什么?

use*_*342 8

最接近的Java waitnotify方法的pthreads 可用作接受条件变量的函数.设置条件变量,调用pthread_cond_wait等待工作,并pthread_cond_signal宣布工作可用.

可以在StackOverflow上轻松找到用法示例.其他地方.

如果您正在等待IO,则另一种可能性是使用poll或等效于睡眠,直到数据到达.

  • 是的,这非常类似于Java的`Object.wait()`和`Object.notify()`,包括与互斥锁(Java:monitor)的关系.还有`pthread_cond_broadcast()`作为Java的'Object.notifyAll()`的类比. (3认同)