问题描述
阅读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*/
解决方法
您似乎在谈论 wait(long,int) 和 notifyAll() 方法。
Java 中的每个对象都有这些方法。
here 描述了如何从 JNI 调用实例方法。