在 JNI 环境中 pthread_cond_broadcast() 和 pthread_cond_timedwait() 的等效函数是什么?

问题描述

阅读this后,我现在了解如何在 JNI 的本机端同步线程的临界区。

但是,我找不到这两个 pthread 调用的等效函数: pthread_cond_timedwait() 和 pthread_cond_broadcast()

我有一个长时间运行的响应处理线程,它以 Java 启动,然后下降到 C 中以接收网络数据,然后将数据排入全局共享响应队列。

同时,我有多个请求线程,它们以 Java 启动,然后下降到 C,向服务器发出网络请求,然后等待响应出现在全局共享响应队列中。

长时间运行的响应线程中的相关代码是:

/* after enqueuing a network response to the global shared Q */
/* wake up all of the request threads waiting for a response */
pthread_cond_broadcast(&q_entry_cv);

以及请求线程中的相关代码

if(q_entries == 0)
  pthread_cond_timedwait(&q_entry_cv,&qlock,&ts);
 /* wake up when the response thread has q'd a new response & search the q*/

是否有针对这些 POSIX 调用的等效 JNI 调用

解决方法

您似乎在谈论 wait(long,int)notifyAll() 方法。
Java 中的每个对象都有这些方法。
here 描述了如何从 JNI 调用实例方法。