回答
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. XCode std :: thread C++
- 3. 對std :: thread :: id的要求。它可以被霧化嗎?
- 4. 使用std :: thread與std :: mutex
- 5. MinGW和std :: thread
- 6. 錯誤C2280:'std :: thread :: thread(const std :: thread&)':嘗試引用已刪除的函數
- 7. Windows std :: thread在內部使用PPL嗎?
- 8. `scoped_thread`用'的std :: thread`
- 9. 在std :: thread :: id的std :: operator中出現分割錯誤==
- 10. ASP.NET會話ID - 跨服務器唯一
- 11. Shopify metafield ID是唯一的唯一用戶或唯一嗎?
- 12. boost :: thread和std :: unique_ptr
- 13. xenomai xddp與std :: thread
- 14. C++ fork/std :: thread和boost :: timed_join
- 15. 在C++中std :: thread庫支持嵌套線程嗎?
- 16. OpenMP,MPI,POSIX線程,std :: thread,boost :: thread如何關聯?
- 17. 這是微軟執行std :: thread的一個大錯誤嗎?
- 18. 不應該std :: thread :: id默認構造函數創建一個「NULL」ID?
- 19. 每個進程或每臺計算機的線程ID是唯一的嗎?
- 20. By-ref參數:這是std :: thread和std :: bind之間的不一致嗎?
- 21. 跨應用程序的唯一iOS設備ID
- 22. 與make_shared <std::thread>
- 23. 如何說std :: thread停止?
- 24. std ::唯一合併
- 25. 在std :: thread中使用std :: move
- 26. 使用std :: thread將多個線程的數組組合在一起使用std :: thread
- 27. Python多處理:跨進程的唯一對象標識
- 28. 跨列唯一值
- 29. 爲每個子進程分配一個帶有分叉的唯一ID
- 30. iBeacon廣告ID是唯一的嗎?
你現在要求專門爲linux上的gcc還是一般的C++?答案似乎不同。 – nwp
我的問題是關於一般的C++標準。我正在尋找所有平臺和所有編譯器的答案。 –
該標準沒有任何「過程」的概念,任何幾個程序可能同時運行和交互的概念。所以這個問題甚至不能用標準的術語來表達,更不用說回答了。所有你可以問的是「典型的實現會做什麼?」 –