原因是我有一个自动并行化,我想确保pthread_create()没有被一个已经在由pthread_create()创建的线程上运行的函数中调用.
解决方法
如果getpid()返回与gettid()相同的结果,那么它是主线程.
int i_am_the_main_thread(void) { return getpid() == gettid(); }
gettid() returns the caller’s thread ID (TID). In a single-threaded process,the thread ID is equal to the process ID (PID,as returned by getpid(2)). In a multithreaded process,all threads have the same PID,but each one
has a unique TID.
Thread groups were a feature added in Linux 2.4 to support the
POSIX threads notion of a set of threads that share a single
PID. Internally,this shared PID is the so-called thread
group identifier (TGID) for the thread group. Since Linux
2.4,calls to getpid(2) return the TGID of the caller.The threads within a group can be distinguished by their
(system-wide) unique thread IDs (TID). A new thread’s TID is
available as the function result returned to the caller of
clone(),and a thread can obtain its own TID using gettid(2).