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

时间:2009-06-27 09:24:17

标签: c++ multithreading pthreads

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

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

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

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

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

  

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

确保您启动的每个主题都可以唯一标识:

  • 使用单调增加的计数器
  • 将计数器分配给void*
  • 中的pthread_create

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