回答
std :: thread是在支持pthread的环境中的pthreads之上实现的。所以它成为没有(便携式)保证。
从pthread_self手册:
线程ID被保证只有内的进程是唯一的。 A
线程ID可能在已加入终止的线程后重新使用,或者分离的线程已终止 。
这并不回答C++标准要求的问题,它只是意味着如果C++标准要求线程ID在进程间是唯一的,那么实现不能简单地重用pthread ID。 (但它确实使得C++标准可能不需要线程ID在整个进程中是唯一的。) – hvd
@ hvd是的,但std :: thread是在支持pthread的环境中的pthread上实现的。所以它成为没有(便携式)保证。 – PSIAlt
你可以添加一个'std :: thread'在pthreads的顶部实现的clam的源代码吗?我无法想象这个标准。我也相当肯定Windows是一个反例,因为pthreads可用并且不用于实现'std :: thread',它们都使用本地WinApi实现。但是,微软并不是第一次不符合标准。 – nwp
标准受赠该线程ID在不同的线程独特的,它也表示,终止线程ID可能被重用。它没有指定进程,也没有确认它们的存在,因此,它不能保证跨进程的唯一性。
30.3.1.1
- 类型线程的一个目的:: ID提供用于执行的每个线程并为所有线程的单个独特的值的唯一标识符的对象 不表示执行的线程(30.3.1)。 执行的每个线程都有一个关联的线程:: id对象,它不等于任何其他执行线程的 线程:: id对象,而不是 等于任何std ::线程的线程:: id对象不是 的对象表示执行的线程。
- thread :: id应该是一个可以复制的类(第9章)。该库可以重用不能再被连接的已终止线程 的线程:: id的值。
该标准还隐藏了一个线程::标识的实施,它可能是一个int或别的东西。
- 1. 线程和进程ID是唯一的吗?
- 2. std :: thread :: id是否存在“null”值?
- 3. 使用std :: thread与std :: mutex
- 4. Windows std :: thread在内部使用PPL吗?
- 5. `scoped_thread`用'的std :: thread`
- 6. ASP.NET会话ID - 跨服务器唯一
- 7. Shopify metafield ID是唯一的唯一用户或唯一吗?
- 8. xenomai xddp与std :: thread
- 9. By-ref参数:这是std :: thread和std :: bind之间的不一致吗?
- 10. 如何说std :: thread停止?
- 11. 线程安全的唯一事务ID
- 12. 使用std :: thread将多个线程的数组组合在一起使用std :: thread
- 13. Python多处理:跨进程的唯一对象标识
- 14. 为每个子进程分配一个带有分叉的唯一ID
- 15. Dropbox API - 文件ID是唯一的吗?
- 16. SMTP邮件ID全局唯一吗?
- 17. PHP资源ID是唯一的吗?
- 18. 使用唯一ID进行分配
- 19. 使用唯一ID进行Javascript测试
- 20. 在std :: thread中打开MFC对话框
- 21. 唯一ID
- 22. Android唯一ID
- 23. Boost Thread ID无效
- 24. 从std :: thread转到相关的pthread
- 25. Facebook应用程序范围ID是全球唯一的吗?
- 26. 使用std :: thread使用std :: map的意外行为
- 27. 从std :: thread访问类变量
- 28. 稳定时钟跨线程单调吗?
- 29. 为什么使用std :: thread :: hardware_concurrency()和boost :: thread :: hardware_concurrency()会有区别?
- 30. 'thread'不是GCC的'std'的成员4.8
你现在要求专门为linux上的gcc还是一般的C++?答案似乎不同。 – nwp
我的问题是关于一般的C++标准。我正在寻找所有平台和所有编译器的答案。 –
该标准没有任何“过程”的概念,任何几个程序可能同时运行和交互的概念。所以这个问题甚至不能用标准的术语来表达,更不用说回答了。所有你可以问的是“典型的实现会做什么?” –