Linux 比pthread_self或gettid更好的获取线程ID的方法
我的问题是,是否有一个函数返回的线程ID不是pthread\u self和getId。pthread_self的问题是它返回一个地址,而getId返回系统范围的全局tid。我想要相对的线程id,所以线程id应该是0、1、2、3等等,而不是像pthread\u self那样的地址 没有。如果你真的需要它(我怀疑),实现你自己的机制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
- 声明一个全局
静态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)(这是标准的)