Kurze Antwort: nein, Thread-ID wird nicht unbedingt mit jedem neuen Thread erhöht. Thread-IDs können wiederverwendet werden.
Der Standard sagt
Ein Objekt vom Typ Thread :: id stellt eine eindeutige Kennung für jeden Thread der Ausführung und einem einzigen eindeutigen Wert für alle Thread Objekte, die dies nicht tun repräsentieren einen Thread der Ausführung (30.3.1). Jeder Thread der Ausführung hat ein zugeordnetes thread :: id Objekt, das ungleich dem thread :: id Objekt eines anderen Ausführungs-Threads ist und das nicht ist, das dem thread :: id Objekt eines beliebigen std :: threads entspricht Objekt, das nicht repräsentiert Threads der Ausführung.
thread :: id soll eine trivial kopierbare Klasse sein (Abschnitt 9). Die Bibliothek kann den Wert einer thread :: id eines abgeschlossenen Threads wiederverwenden, der nicht mehr verbunden werden kann.
- n4296; 30.3.1.1 [thread.thread.id]
Es heißt nicht, dass die ID monoton steigt, und es tut Genehmigung Thread-IDs wiederverwendet werden.
Es ist wahrscheinlich, dass Sie die native_handle
möchten, die das Handle sein wird, das die zugrunde liegende Implementierung verwendet. Dies entspricht dem Windows-Thread-Handle unter MSVC. Ob diese monoton ansteigen, hängt von der Dokumentation Ihrer Implementierung ab.
Die MSDN-Dokumentation für die Funktion GetCurrentThreadId
schlägt vor, dass die Thread-ID einen Thread eindeutig identifiziert, bis er beendet wird; es sagt nicht, ob die IDs monoton ansteigen, und die Implikation dieses Satzes scheint zu sein, dass sie wiederverwendet werden können.
Zusammenfassend, der C++ - Standard bietet keine Garantie für die Werte der Thread-IDs. Wenn Sie dies garantieren wollen, müssen Sie jeden Thread um einen Atomzähler erhöhen lassen oder auf andere Weise einen monoton ansteigenden Wert mit entsprechender Synchronisation erhalten.
Thread-IDs können wiederverwendet werden, und der Standard stellt sehr geringe Anforderungen an die textliche Darstellung der ID. Wenn Sie nur über Windows und eine Situation sprechen, in der Ihre Threads für die Dauer des Programms laufen, dann bin ich mir nicht sicher. – TartanLlama