我对新线程()创建的 Java线程之间的匹配问题提出了一个小问题,并由Thread.currentThread()
和获得本机Linux 线程可以创建ty pthread_create()
函数调用。
问题是:考虑我想用pthread_t
参数调用一些本机Linux函数以便在该线程上获得一些操作,然后是否可以在Java中创建线程(就像一个ordrinary Java Thread一样) )获取 id (通过调用Thread.getId()
)并通过JNA调用将 id 传递给本机函数?期望相当正确的函数行为是否合理?
还是有其他(右)方式?
非常感谢你的时间和你的感情!!!!
答案 0 :(得分:1)
您可以对您编写的本机函数使用JNA调用,然后查询当前线程。 (例如pthread_self
)。
我不知道其他方式是否有效或可行,快速谷歌没有显示任何内容,但我不是JNA专家。
如果你需要一个特定的线程,你总是可以写一个返回linux线程句柄的JNA函数。启动线程时,调用该函数并记录结果以备将来使用。我不知道是否有任何关于Java线程的保证总是对应于给定的System线程。
答案 1 :(得分:0)
如果您已经在使用JNA,请调用pthread_self()
(来自目标线程)以获取pthread_t
结构(它是不透明的),然后将其传递给接受{{{ 1}}。您可能需要在* .h包含文件中进行挖掘,以了解如何将pthread_t
结构接收回JNA。
更新:此mapping可能有所帮助。听起来你只需要不透明的pthread_t
结构,你不需要像人们想要的那样在结构内部挖掘。但您可以使用他的代码作为JNA映射的示例。
答案 2 :(得分:0)
似乎获得此类行为的最简单方法之一是将 ZERO 作为threadId传递,并期望将此类调用的线程绑定到您希望的核心。
当然还有另一种方法可以将一个线程绑定到一个核心(来自Java PL),但你必须决定cpu_set_t类型的替换及其大小。