匹配

2013-12-19 20 views
2

我已經有了匹配之間的Java線程由新主題(創建胎面一個小問題)Thread.currentThread()本地Linux線程變得可以被創建TY pthread_create()功能呼叫。匹配

現在的問題是:考慮我想用pthread_t參數調用一些本地Linux函數,以便在該線程上獲得一些操作,那麼是否有可能在Java中創建線程(就像一個ord Java Java線程) ID(通過調用Thread.getId())並通過JNA調用通過該ID本地函數?期望一個正確的功能行爲是否合理?

或者還有其他一些(正確的)方法?

非常感謝你的時間和你的敬意!

+0

Thead.getId()是Java專有的唯一遞增數字。 –

回答

0

非常感謝你們!

看來,獲得這種行爲的最簡單方法之一是將ZERO設置爲threadId,並期望線程將此類調用與您希望的核心進行關聯。

當然,還有一種方法可以將線程仿射到核心(來自Java PL),但您必須決定cpu_set_t類型替換以及其大小。

1

您可以對您編寫的本地函數使用JNA調用,然後查詢當前線程。 (例如,pthread_self)。

我不知道另一種方式是行得通還是可行的,一個快速的谷歌沒有顯示任何東西,但我不是JNA專家。

如果你需要一個特定的線程,你總是可以編寫一個返回linux線程句柄的JNA函數。當你的線程開始調用該函數並記錄結果以備將來使用。我不知道是否有任何關於一個Java線程的保證,它總是對應給定的系統線程。

+0

+1我相信如果你使用線程ID「0」它適用於當前線程。 –

0

如果您已經使用JNA,請致電pthread_self()(來自目標線程)以獲取pthread_t結構(它不透明),然後將其傳遞給接受pthread_t的函數。您可能需要在* .h包含文件中進行深入研究,以瞭解如何將pthread_t結構接收回JNA。

更新:這個mapping可能會有所幫助。聽起來就像你只需要不透明的pthread_t結構,你不需要在結構內挖掘,就像人們試圖做的那樣。但是,您可以使用他的代碼作爲JNA映射的示例。

+0

謝謝!我仍然沒有機會檢查它是否是真的,但我做了一些查詢,發現Java自1.3開始運行本機線程。我要測試一下,然後發佈我的經驗。 – SergeZ