1

我假设 apthread_t在给定线程的整个生命周期中都保持不变,但我的实验似乎证明了这个假设是错误的。如果给定线程的 id 在其生命周期内不保持不变,我如何存储一个pthread_t以便另一个线程可以pthread_join用来阻塞直到线程完成?

由于其他原因,知道如何获取线程的唯一标识符,我可以来回转换为pthread_t. 有没有办法做到这一点?

那里有很多很棒的信息,但我很难为这些问题找到有用的答案。我会很感激我能得到的任何帮助/建议!

编辑:另外,我不知道为什么,但是在每个新线程的前面(在线程的函数内)添加 sleep(1) 和休眠 1 秒时,一切似乎都按预期工作。这可能是一根稻草,但pthread_t值会在新线程开始时暂时改变吗?

4

2 回答 2

1

您不能依赖pthread_t唯一性,但可以使用pthread_equal()来确定两个线程 ID 是否引用同一个线程。

NAME
     pthread_equal -- compare thread IDs

SYNOPSIS
     #include <pthread.h>

     int
     pthread_equal(pthread_t t1, pthread_t t2);

DESCRIPTION
     The pthread_equal() function compares the thread IDs t1 and t2.

RETURN VALUES
     The pthread_equal() function will return non-zero if the thread IDs t1 and t2
     correspond to the same thread. Otherwise, it will return zero.
于 2009-06-27T09:34:32.293 回答
0

pthreads线程的唯一和常量标识符?

为确保您启动的每个线程都可以被唯一标识:

  • 使用单调递增的计数器
  • 将计数器分配给void*inpthread_create

有关更多详细信息,请参阅此答案:How to assign unique ids to threads in a pthread wrapper?

于 2015-05-11T03:43:56.583 回答