NDK / JNI: определение текущего потока - PullRequest
6 голосов
/ 22 апреля 2011

В собственном методе JNI есть способ узнать идентификатор текущего потока без обратного вызова Java?Локальное хранилище потоков также будет работать.

РЕДАКТИРОВАТЬ: pthread.h присутствует в папке include NDK ... Кто-нибудь знает, соответствуют ли потоки Java POSIX в реализации NDK?

1 Ответ

5 голосов
/ 22 апреля 2011

Какой идентификатор вас интересует?Дамп потока Dalvik включает в себя следующее:

"main" prio=5 tid=1 TIMED_WAIT
  | group="main" sCount=1 dsCount=0 obj=0x40017730 self=0x12798
  | sysTid=3167 nice=0 sched=0/0 cgrp=default handle=-2146114456
  | schedstat=( 358850000 275073000 869 ) utm=23 stm=12 core=0

"tid" - это идентификатор виртуальной машины.«ручка» - это pthread_t.«sysTid» является результатом gettid () (идентификатор процесса Linux).

Идентификатор потока libcore (полученный из java.lang.Thread.getId ()) не отображается.

(Вы можете получить вышеупомянутое с помощью "adb shell kill -3". Вывод идет в общий файл, определенный свойством dalvik.vm.stack-trace-file - обычно /data/anr/traces.txt, но этоварьируется в зависимости от устройства.)

РЕДАКТИРОВАТЬ: Каждый поток Dalvik VM является Linux pthread.Системный вызов gettid () даст вам уникальный идентификатор для каждого потока.Кроме того, вы можете добавить идентификационную информацию в TLS в java.lang.Thread или pthread_key.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...