Java Thread和本机Linux线程之间的匹配

时间:2013-12-19 07:18:39

标签: java linux multithreading matching

我对新线程()创建的 Java线程之间的匹配问题提出了一个小问题,并由Thread.currentThread()获得本机Linux 线程可以创建ty pthread_create()函数调用。

问题是:考虑我想用pthread_t参数调用一些本机Linux函数以便在该线程上获得一些操作,然后是否可以在Java中创建线程(就像一个ordrinary Java Thread一样) )获取 id (通过调用Thread.getId())并通过JNA调用将 id 传递给本机函数?期望相当正确的函数行为是否合理?

还是有其他(右)方式?

非常感谢你的时间和你的感情!!!!

3 个答案:

答案 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类型的替换及其大小。