2012-12-10 21 views
14

Eğer bir iş parçacığı kimliğim varsa, işlem başına veya işletim sistemi boyunca (oturum açmış tüm kullanıcılar arasında) benzersiz (iş parçacığı olduğu sürece) olacağından emin olabilir miyim? Windows üzerindeİş parçacığı kimliği işlem başına veya bilgisayar başına benzersiz mi?

+0

bir iş parçacığı ömrü sırasında ve kimlik bu süre içinde sabit kalacak farklı çekirdekler/işlemciler üzerinde çalışan biliyorum sonra, cevabı siz ;-) çıkarabiliriz –

cevap

11

Evet, parçacığı kimlikleri ve Süreç kimlikleri aynı havuzdan ayrılır, böylece benzersiz olacaktır. Ancak iplik veya işlem bittiğinde, ID başka bir iplik veya işlem tarafından tekrar kullanılabilir.

+2

Evet, teşekkürler. PID'lerin benzersiz olduğunu biliyorum. İplik kimlikleri hakkında emin değildim. – c00000fd

+0

Cevabınızı, ipliğin veya işlem kimliğinin ne sıklıkla geri dönüştürüldüğünü açıklamak için genişletebilir misiniz? –

+0

@ChristopherOezbek Çekirdek nesnesi kapatıldığında kimliği yeniden kullanılabilir. Yani şu tamamen mümkündür: 'hThread1 = CreateThread (... &tid1); CloseHandle (hThread1); hThread2 = CreateThread (... &tid2); // tid1 == tid2, hatta hThread1 == hThread2' onlar şimdi farklı bir çekirdeğe atıfta rağmen (iplik ve onun kolu kapalı olması eğer bu iş parçacığı izleme kimliğini yapılmakla birlikte) nesne. – parrowdice

8

bir iplik bir çekirdek nesnesi tarafından temsil edilir, örneğin Windows platformunda. Bu nedenle, tüm oturum açma oturumlarında tüm süreçlerde kimlik benzersiz olacaktır. Ancak, iplik çekirdek nesnesi kapatıldıktan sonra iplik kimlikleri geri dönüştürülebilir. çalıştırırken

GetCurrentThreadId de açıkça benzersiz id hakkında diyor.

+0

teşekkürler. parçacığı oluşturma FILETIME ile bir kutu çift onu, o GetThreadTimes ile elde edilebilir iplik kimliği geri dönüşüm karşı korunmak için() API. – c00000fd

+0

@ user843732 : Doğru şekilde yapıldı, evet yapabilirsin.Bir sürecin ana PID'sinin ebeveyn işleminin geri dönüşü olan bir süreçle ebeveynin PID olduğunu gösterip göstermediğini kontrol etmek için bu tekniği kullanırım – parrowdice

+0

@parrowdice: One follow-up question, guys. GetThreadTimes() API tarafından döndürülen "FILETIME" zamanlaması, herhangi bir zamanlayıcı ile ilgili "jitter" yok, değil mi? Dokümanlar, iş parçacığı oluşturma değerinin "100 nanosaniye cinsinden ifade edildiğini iddia ediyor." ime birimleri "korkunç bir kesin! Dahili zamanlayıcının bu API'ye yapılan farklı çağrılar için yuvarlanmasına neden olmaz, değil mi? – c00000fd

İlgili konular