そのため、スレッドに関する情報を反映する構造のリストで現在のスレッド ID を見つけるのに非常に苦労しています。
基本的に、リストの各要素にはフィールドがありますpthread_t id
。私の検索機能は次のようなものです:
int thread_pos(pthread_t tid)
{
int i;
for (i = 0; i < my_threads.thread_num; i++)
{
printf("for: %d %d %d\n", my_threads.vector[i].id, tid, pthread_equal(my_threads.vector[i].id, tid));
if (pthread_equal(my_threads.vector[i].id, tid))
{
printf("found\n");
return i;
}
}
return -1;
}
my_threads.vector には要素が 1 つしかないため、次の 1 行が出力されます。
419817216 419817216 0
データ構造:
struct my_thread_t
{
pthread_t id;
};
struct my_threads_t
{
struct my_thread_t vector[100];
int thread_num;
};
この方法でリストに要素を追加します。
pthread_create(&new_tid, NULL, start_thread, &my_threads.vector[my_threads.thread_num].thread_arg);
my_threads.vector[my_threads.thread_num].id = new_tid;
my_threads.thread_num++;
問題は、要素がリストにあるにもかかわらず、それが見つからないことです。比較ごとに 1 行出力しました (たとえば419817216 419817216 0
、リスト内の tid、キー tid、および pthread_equal の結果を表示)。ご覧のとおり、数値表現は同じですが、どういうわけか pthread_equal はそうではないと言っています。
私は何が欠けていますか?