私はマルチスレッドのCアプリケーションを持っています。スレッド名を設定してhtopなどのツールに表示したいと考えています。p_threadはhtopに表示されないスレッド名を設定します
私はスレッド
pthread_create(&q->threads[i].thread, NULL, worker, &q->threads[i]);
//q->threads[i].thread is a pthread_t object,
//and q->threads[i] is the arg passed to worker.
を作成していると私は、コードを実行すると、ワーカー機能では、私は、私は私の労働者のそれぞれについて、
The name to be set is worker-1
setname returned 0
Get name returned 0 and shows the name is 'worker-1'
を
pthread_t self = pthread_self();
snprintf(name, 16, "worker-%d", data->id);
printf("The name to be set is %s\n", name);
int res = pthread_setname_np(self, name);
printf("setname returned %d\n", res);
char thread_name[16];
res = pthread_getname_np(self, thread_name, 16);
printf("Get name returned %d and shows the name is '%s'\n", res, thread_name);
を取得していますスレッド(名前はworker-Xの形式)
しかし、結果をhtopで表示すると(スレッドツリーを表示するようにhtopが設定されています)、すべてのスレッドが親プログラム名で表示されます。
どこにでもスレッド名を参照するコードはありません。そのため、リセットされている場所がわかりません。私も/ proc/{PID}を見て、スレッド名が間違って設定されています。だから、それは私のコードの問題だと思うが、私はそれを理解することはできない。
私はUbuntu 16を使用しています。私はCMakeも使用していますが、それとは関係ないと思います。
'htop's"カスタムスレッド名を表示する "オプションを有効にしましたか?また、「すべてのリフレッシュ時にプロセス名を更新する」可能性がありますか? – twalberg