Check if current thread is main thread

后端 未结 2 1646
醉酒成梦
醉酒成梦 2021-01-04 11:03

How can i check if the current thread is the main thread on linux? It looks like gettid() only returns an pid but it seems that linux does not guarantee the thread with main

相关标签:
2条回答
  • 2021-01-04 11:28

    What about using pthread_self()?.

    This returns the thread_id of the calling thread. With this function, you can store the main thread id (when you know is main) and compare it later with other values returned from pthread_self() to identify if they are the main thread or another one.

    Although I think is wiser to have well structured code. Something like functions to be executed in slave threads and other functions to be executed in the master thread. This is a better approach to this kind of problems.

    0 讨论(0)
  • 2021-01-04 11:34

    For Linux:

    If getpid() returns the same result as gettid() it's the main thread.

    int i_am_the_main_thread(void)
    {
      return getpid() == gettid();
    }
    

    From man 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.

    From man clone:

    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).

    0 讨论(0)
提交回复
热议问题