2012-12-10 12 views
14

Angenommen, ich habe eine Thread-ID. Kann ich sicher sein, dass sie pro Prozess oder im gesamten Betriebssystem (unter allen angemeldeten Benutzern) eindeutig ist (solange der Thread läuft)?Sind Thread-IDs pro Prozess oder pro Computer eindeutig?

+0

Sobald Sie wissen, dass ein Thread während seiner Laufzeit auf verschiedenen Kernen/Prozessoren laufen kann und die ID während dieser Zeit konstant bleibt, können Sie die Antwort selbst ableiten ;-) –

Antwort

11

Ja, Thread-IDs und Prozess-IDs unter Windows werden aus demselben Pool zugewiesen, sodass sie eindeutig sind. Sobald der Thread oder Prozess jedoch endet, kann die ID von einem anderen Thread oder Prozess wiederverwendet werden.

+2

Ja, danke. Ich weiß, dass PIDs einzigartig sind. Ich war mir nicht sicher über Thread-IDs. – c00000fd

+0

Können Sie Ihre Antwort erweitern, um zu erklären, wie oft Thread-IDs oder Prozess-IDs recycelt werden? –

+0

@ChristopherOezbek Sobald das Kernel-Objekt geschlossen ist, kann seine ID wiederverwendet werden. So ist folgendes möglich: 'hThread1 = CreateThread (... &tid1); CloseHandle (hThread1); hThread2 = CreateThread (... &tid2); // tid1 == tid2, auch hThread1 == hThread2' Obwohl sie sich jetzt auf einen anderen Kernel beziehen Objekt – parrowdice

8

Ein Thread wird durch ein Kernel-Objekt, z.B. auf Windows-Plattform. Daher wird die ID für alle Prozesse in allen Anmeldesitzungen eindeutig sein. Thread-IDs können jedoch wiederverwendet werden, nachdem das Thread-Kernel-Objekt geschlossen wurde.

GetCurrentThreadId sagt auch eindeutig über die eindeutige ID während des Betriebs.

+0

Thanks.Um Schutz vor Thread-ID-Recycling (wenn Thread & sein Handle geschlossen werden konnte während der Verfolgung dieser Thread-ID ist getan) kann man es mit Thread-Erstellung FILETIME, die mit GetThreadTimes() API erhalten werden konnte. – c00000fd

+0

@ user843732 Auf die richtige Weise getan, ja, das kann ich. Ich benutze diese Technik, um zu überprüfen, ob die Eltern-PID eines Prozesses dessen Eltern-Prozess anzeigt, im Gegensatz zu einem Prozess, der seine PID recycelt hat. – parrowdice

+0

@parrowdice: Eine Folgefrage, Leute Das von der GetThreadTimes() - API zurückgegebene "FILETIME" -Timing hat keinen timerbezogenen "Jitter", oder? Die Dokumente behaupten, dass der Wert der Thread-Erzeugung in "100 Nanosekunden t" ausgedrückt wird Ime Einheiten "das ist schrecklich präzise! Es wird nicht dazu führen, dass der interne Timer für verschiedene Aufrufe dieser API aufruft. – c00000fd

Verwandte Themen