【发布时间】:2021-03-26 05:56:56
【问题描述】:
在阅读了this 之后,我现在了解了如何在 JNI 的本机端同步线程的关键部分。
但是,我找不到这 2 个 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 调用?
【问题讨论】:
-
没有。是什么让你认为会有?
-
目前实施的部分解决方案是不充分的。
-
也许除了 user207421 和我之外的其他人能想到一个可行的替代方案。
-
这不是任何人能想到的问题。您的问题专门针对 JNI 环境中的函数,它们都列在 JNI 规范中,并且没有任何用于此目的。我同意@user0 的观点,你应该使用
Object.wait()和Object.notifyAll(),但是你没有询问Java 空间中的方法。
标签: multithreading java-native-interface thread-synchronization