如果我有一个线程ID,那么我可以确信在进程内或整个操作系统中(所有登录的用户)这个线程ID将是唯一的(只要线程正在运行)吗?
如果我有一个线程ID,那么我可以确信在进程内或整个操作系统中(所有登录的用户)这个线程ID将是唯一的(只要线程正在运行)吗?
是的,在Windows上,线程ID和进程ID是分配自同一池的,因此它们将是唯一的。然而,一旦线程或进程结束,该ID可能会被另一个线程或进程重新使用。
hThread1 = CreateThread(...&tid1); CloseHandle(hThread1); hThread2 = CreateThread(...&tid2); // tid1 == tid2, even hThread1 == hThread2
尽管它们现在引用不同的内核对象。 - parrowdice一个线程在Windows平台上是由内核对象表示的。因此,它的ID将在所有进程和所有登录会话中是唯一的。然而,在线程内核对象关闭后,线程ID可能会被重新分配。
GetCurrentThreadId函数在运行时也明确说明了线程的唯一标识符。
FILETIME
时间没有任何与计时器相关的“抖动”,对吧?文档声称线程创建的值以“100纳秒时间单位”表示,这非常精确!这不会导致内部计时器开始将其四舍五入为对该API的不同调用,对吧? - c00000fdFILETIME
结构始终是100纳秒的滴答声。这并不意味着底层API实际上会返回相差一个100纳秒滴答声的内容。此外,如果某些事情发生在少于100纳秒的时间内,值可能是相同的。所有这些都说了,你为什么关心这个回收?知道这一点可能有助于更好地回答问题。(目前的后续问题令人担忧。我脑海中正在响起各种警报,告诉我我们正在变得“太聪明”了。:-] ) - chwarr