Linux 比pthread_self或gettid更好的获取线程ID的方法

Linux 比pthread_self或gettid更好的获取线程ID的方法,linux,pthreads,Linux,Pthreads,我的问题是,是否有一个函数返回的线程ID不是pthread\u self和getId。pthread_self的问题是它返回一个地址,而getId返回系统范围的全局tid。我想要相对的线程id,所以线程id应该是0、1、2、3等等,而不是像pthread\u self那样的地址 没有。如果你真的需要它(我怀疑),实现你自己的机制 声明一个全局静态int线程\u计数 在我的线程id中声明一个全局静态线程 线程启动时,锁定互斥锁并分配id 下面是一个例子: static int thread_c

我的问题是,是否有一个函数返回的线程ID不是pthread\u selfgetIdpthread_self的问题是它返回一个地址,而getId返回系统范围的全局tid。我想要相对的线程id,所以线程id应该是0、1、2、3等等,而不是像pthread\u self那样的地址

没有。如果你真的需要它(我怀疑),实现你自己的机制

  • 声明一个全局
    静态int线程\u计数
  • 在我的线程id中声明一个全局
    静态线程
  • 线程启动时,锁定互斥锁并分配id
下面是一个例子:

static int thread_count;
static __thread int my_thread_id;
static pthread_mutex_t start_mtx = PTHREAD_MUTEX_INITIALIZER;

static void *th_function(void *arg)
{
    pthread_mutex_lock(&start_mtx);
       my_thread_id = thread_count++;
    pthread_mutex_unlock(&start_mtx);
    /* rest of function */
}

显然,您还可以使用特定于线程的数据(
pthread\u setspecific
等)(这是标准的)。如果你真的需要它(我怀疑),实现你自己的机制

  • 声明一个全局
    静态int线程\u计数
  • 在我的线程id中声明一个全局
    静态线程
  • 线程启动时,锁定互斥锁并分配id
下面是一个例子:

static int thread_count;
static __thread int my_thread_id;
static pthread_mutex_t start_mtx = PTHREAD_MUTEX_INITIALIZER;

static void *th_function(void *arg)
{
    pthread_mutex_lock(&start_mtx);
       my_thread_id = thread_count++;
    pthread_mutex_unlock(&start_mtx);
    /* rest of function */
}
显然,您还可以使用特定于线程的数据(
pthread_setspecific
etc)(这是标准的)