2012-12-10 14 views
14

Dire, se ho un ID thread, posso essere certo che sarà unico (per quanto tempo il thread è in esecuzione) per processo o in tutto il sistema operativo (tra tutti gli utenti registrati)?Gli ID filo sono univoci per processo o per computer?

+0

Una volta verificato che un thread può essere eseguito su diversi core/processori durante la sua durata e che l'ID rimarrà costante durante quel periodo, è possibile dedurre la risposta da soli ;-) –

risposta

11

Sì, ID thread di e ID di processo di Windows sono assegnati dallo stesso pool, in modo che sarà unica. Tuttavia, una volta terminata la discussione o il processo, l'ID potrebbe essere riutilizzato da un'altra discussione o processo.

+2

Sì, grazie. So che le Immunodeficienze Primitive sono uniche. Non ero sicuro degli ID di thread. – c00000fd

+0

Puoi espandere la tua risposta per spiegare con quale frequenza gli ID di thread o ID processo vengono riciclati? –

+0

@ChristopherOezbek Non appena l'oggetto kernel viene chiuso, è possibile riutilizzare l'ID. Quindi il seguente è del tutto possibile: 'hThread1 = CreateThread (... &tid1); CloseHandle (hThread1); hThread2 = CreateThread (... &tid2); // tid1 == tid2, anche hThread1 == hThread2' Anche se ora fanno riferimento a un diverso kernel Oggetto: – parrowdice

8

Un thread è rappresentato da un oggetto kernel ad es. sulla piattaforma Windows. Quindi il suo ID sarà unico in tutti i processi attraverso tutte le sessioni di accesso. Tuttavia, gli ID dei thread possono essere riciclati dopo la chiusura dell'oggetto thread kernel.

GetCurrentThreadId anche dice con chiarezza l'ID univoco durante l'esecuzione.

+0

Grazie per evitare il riciclaggio degli ID thread (se thread e il relativo handle possono essere chiusi mentre viene eseguito il tracciamento dell'ID thread), è possibile accoppiarlo con la creazione thread FILETIME, che può essere ottenuta con API GetThreadTimes(). – c00000fd

+0

@ user843732 : Fatto nel modo giusto, sì è possibile. Utilizzo questa tecnica per verificare se il PID padre di un processo indica che è un processo padre rispetto a un processo che ha riciclato il PID del genitore. – parrowdice

+0

@parrowdice: una domanda successiva, ragazzi. Il tempo 'FILETIME' restituito dall'API GetThreadTimes() non ha alcun" jitter "correlato al timer, vero? I documenti affermano che il valore della creazione del thread è espresso in" 100 nanosecondi " unità di misura "che è una precisione terribile! Non farà in modo che il timer interno inizi ad arrotondarlo per chiamate diverse a quella API, vero? – c00000fd