【问题标题】:What are the equivalent functions in the JNI env for pthread_cond_broadcast() and pthread_cond_timedwait()?JNI 环境中 pthread_cond_broadcast() 和 pthread_cond_timedwait() 的等效函数是什么?
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 谢谢@user0。我将实现回调,看看是否足够。
猜你喜欢
  • 2014-02-13
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多