use*_*862 11 c c++ linux multithreading pthreads
我怎样才能检查当前线程是否是linux上的主线程?看起来像gettid()只返回一个pid,但似乎linux不保证带有main()的线程总是有一个const和统一的pid.
这样做的原因是我有一个自动并行化,我想确保在已经由pthread_create()创建的线程上运行的函数中不调用pthread_create().
alk*_*alk 11
对于Linux:
如果getpid()返回与gettid()主线程相同的结果.
int i_am_the_main_thread(void)
{
return getpid() == gettid();
}
Run Code Online (Sandbox Code Playgroud)
来自man gettid:
gettid()返回调用者的线程ID(TID).在单线程进程中,线程ID等于进程ID(PID,由getpid(2)返回).在多线程进程中,所有线程都具有相同的PID,但每个线程都具有唯一的TID.
来自man clone:
线程组是Linux 2.4中添加的一项功能,用于支持共享单个PID的一组线程的POSIX线程概念.在内部,该共享PID是线程组的所谓线程组标识符(TGID).从Linux 2.4开始,对getpid(2)的调用返回调用者的TGID.
组内的线程可以通过它们的(系统范围的)唯一线程ID(TID)来区分.函数结果返回给clone()的调用者时,新线程的TID可用 ,并且线程可以使用gettid(2)获取自己的TID .
那使用呢pthread_self()?
这将返回thread_id调用线程的 。使用此函数,您可以存储主线程 ID(当您知道是主线程时),并稍后将其与返回的其他值进行比较,pthread_self()以确定它们是主线程还是另一个线程。
尽管我认为拥有结构良好的代码更明智。比如要在从属线程中执行的函数和要在主线程中执行的其他函数。这是解决此类问题的更好方法。
| 归档时间: |
|
| 查看次数: |
5405 次 |
| 最近记录: |