gpt4 book ai didi

c - pthread_self() 返回的线程 ID 与调用 gettid(2) 返回的内核线程 ID 不同

转载 作者:行者123 更新时间:2023-11-30 16:17:53 35 4
gpt4 key购买 nike

这句话来自 man page of pthread_self() .

那么,我应该根据什么来决定是使用 pthread_self 还是 gettid 来确定哪个线程正在运行该函数?

两者都是不可移植的。
为什么有两个不同的函数来获取线程ID?

最佳答案

So, on what basis should I decide whether I should use pthread_self or gettid to determine which thread is running the function?

每当您想要识别应用程序中的线程时,您应该始终使用pthread_self()gettid() 可以用于某些目的并且如果您知道它是Linux。例如,gettid() 可用于获取线程特定种子的种子(在 srand() 中使用)。

Both are non portable.

这并不完全正确。 gettid() 不可移植,因为它是 Linux 特定函数。但是,只要您不对 pthread_self() 的表示形式做出任何假设,pthread_self() 就是可移植的。

例如,以下内容不可移植。

printf("Thread ID is: %ld", (long) pthread_self());

因为无法保证任何 pthread_self() 都将是某种整数。但是

pthread_t my_tid; //filled elsewhere

pthread_t tid = pthread_self();

if( pthread_equal(my_tid, tid) ) {
/* do stuff */
}

完全便携。

前者不可移植,因为它假设线程 ID 是整数,而后者不是。

Why are there two different functions to get the thread ID?

它们不是获得相同值的两种不同方式。一个(pthread_self())由线程库(pthreads)提供,而另一个(gettid())是操作系统特定的函数。不同的操作系统可能提供不同的接口(interface)/syscall 来获取线程 ID,类似于 gettid()。因此您不能在可移植应用程序中依赖 gettid()

关于c - pthread_self() 返回的线程 ID 与调用 gettid(2) 返回的内核线程 ID 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56135454/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com