所以,我很难在结构列表中找到当前线程 id,它反映了有关线程的信息。
基本上,列表中的每个元素都有一个 field 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 个元素,因此它打印一行:
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++;
问题是,尽管该元素存在,但在列表中却找不到它。我在每次比较时都打印了一行(例如419817216 419817216 0
,显示列表中的 tid、键 tid 和 pthread_equal 的结果)。如您所见,数字表示是相同的,但不知何故 pthread_equal 说它们不是。
我错过了什么?