回答
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++標準。我正在尋找所有平臺和所有編譯器的答案。 –
該標準沒有任何「過程」的概念,任何幾個程序可能同時運行和交互的概念。所以這個問題甚至不能用標準的術語來表達,更不用說回答了。所有你可以問的是「典型的實現會做什麼?」 –