2014-03-01 30 views
0

Linux线程ID的回收策略是什么?Linux线程ID回收策略

除非新的PID获得最大限制并被重新绑定,否则Linux进程标识不会立即重新使用。

当我使用pthread_self()获取线程ID时,我得到了像1028,1034这样的TID。我想这是进程中线程的内部“序列号”。所以我想用PID回收策略这样的线程ID回收策略会更合适。 但是我不太确定Linux pthread实现是否属实。

+2

你好,欢迎来到[StackOverflow](http://stackoverflow.com)。请花一些时间阅读 [帮助页面](http://stackoverflow.com/help),尤其是名为[“我可以问什么问题?”](http://stackoverflow.com/help /主题)和[“我应该避免问什么类型的问题?”](http://stackoverflow.com/help/dont-ask)。更重要的是,请阅读[Stack Overflow问题清单](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)。您可能还想了解[SSCCE](http://www.sscce.org/)是什么。 – hivert

回答

0

螺纹linux进程具有

  1. 的OS PID由过程中的所有线程共享 - 使用getpid
  2. 进程中的每个线程有其自己的OS线程id - 使用gettid
  3. 一个并行线程在进行各种pthread相关调用时,由pthreads在内部使用的线程ID来标识线程 - 使用pthread_self等。

如果您试图实施“回收策略”或为什么您认为需要这样做,则无法从您的问题中确定。

编辑

作为一个无聊的好奇,你可以看看通过Linux并行线程代码,但在技术上你没有理由去关心。 POSIX规范基本上只是说线程ID在进程中保证是唯一的,在线程死后可以自由重用。

尽管实现可能具有在系统中唯一的线程ID,但应用程序应该只假定线程ID在单个进程中可用且唯一。调用IEEE Std 1003.1-2001的本卷中定义的任何函数并将来自另一个进程的线程的线程ID作为参数传递的效果未指定。如果在线程终止时使用detachstate属性设置为PTHREAD_CREATE_DETACHED或者为该线程调用了pthread_detach()或pthread_join(),则符合实现可以在线程终止后自由重用线程ID。

+0

我不是试图实施一个TID“回收策略”,只是徘徊,如果一个线程ID将立即重用或在新的TID获得最大限制并被重新绕回后。请原谅我的泳池英语。 –

+0

我更新了答案。作为一个实际的问题,我从来没有见过一个pthreads实现,立即重用线程ID,但我不能说我一直在积极寻找它。 – Duck

+0

我将检查Linux上的pthread实现。坦克。 –