我怎样才能检查当前线程是否是linux上的主线程?看起来像gettid()只返回一个pid,但似乎linux不保证带有main()的线程总是有一个const和统一的pid。
这样做的原因是我有一个自动并行化,我想确保在已经在由pthread_create()创建的线程上运行的函数中不调用pthread_create()。
我怎样才能检查当前线程是否是linux上的主线程?看起来像gettid()只返回一个pid,但似乎linux不保证带有main()的线程总是有一个const和统一的pid。
这样做的原因是我有一个自动并行化,我想确保在已经在由pthread_create()创建的线程上运行的函数中不调用pthread_create()。
对于Linux:
如果 getpid()
返回相同的结果 gettid()
这是主线索。
int i_am_the_main_thread(void)
{
return getpid() == gettid();
}
从 man gettid
:
gettid() 返回调用者的线程ID(TID)。在单线程进程中,线程ID等于进程ID(PID,由返回的 GETPID(2))。在多线程进程中,所有线程都具有相同的PID,但每个线程都具有相同的PID 有一个独特的TID。
从 man clone
:
线程组是Linux 2.4中添加的一项功能,用于支持 POSIX线程概念是一组共享单个线程的线程 PID。在内部,这个共享PID就是所谓的线程 线程组的组标识符(TGID)。自Linux 2.4,来电 GETPID(2) 返回调用者的TGID。
组内的线程可以通过它们区分 (系统范围内)唯一线程ID(TID)。一个新线程的TID是 可用作函数结果返回给调用者 克隆(),一个线程可以使用获取自己的TID gettid(2)。
怎么样使用 pthread_self()
?。
这会返回 thread_id
调用线程。使用此函数,您可以存储主线程ID(当您知道是main时)并稍后将其与从其返回的其他值进行比较 pthread_self()
确定它们是主线程还是其他主线程。
虽然我认为拥有结构良好的代码更明智。类似于要执行的函数 奴隶 线程和其他要在中执行的函数 主 线。这是解决此类问题的更好方法。