Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 每个进程或每台计算机的线程ID是唯一的吗?_C++_Multithreading_Winapi_Thread Safety - Fatal编程技术网

C++ 每个进程或每台计算机的线程ID是唯一的吗?

C++ 每个进程或每台计算机的线程ID是唯一的吗?,c++,multithreading,winapi,thread-safety,C++,Multithreading,Winapi,Thread Safety,比方说,如果我有一个线程ID,我可以保证它在每个进程或整个操作系统(在所有登录用户中)都是唯一的(只要线程正在运行)?是的,Windows上的线程ID和进程ID是从同一个池中分配的,因此它们是唯一的。但是,一旦线程或进程结束,该ID可能会被另一个线程或进程重新使用。线程由内核对象表示,例如在Windows平台上。因此,它的id在所有登录会话的所有进程中都是唯一的。但是,关闭线程内核对象后,可以回收线程ID 还清楚地说明了运行时的唯一id。是的,谢谢。我知道PID是独一无二的。我不确定线程ID。你

比方说,如果我有一个线程ID,我可以保证它在每个进程或整个操作系统(在所有登录用户中)都是唯一的(只要线程正在运行)?

是的,Windows上的线程ID和进程ID是从同一个池中分配的,因此它们是唯一的。但是,一旦线程或进程结束,该ID可能会被另一个线程或进程重新使用。

线程由内核对象表示,例如在Windows平台上。因此,它的id在所有登录会话的所有进程中都是唯一的。但是,关闭线程内核对象后,可以回收线程ID


还清楚地说明了运行时的唯一id。

是的,谢谢。我知道PID是独一无二的。我不确定线程ID。你能详细解释一下线程ID或进程ID被回收的频率吗?@ChristopherRoezbek一旦内核对象关闭,它的ID就可以被重新使用。因此,完全可以执行以下操作:
hThread1=CreateThread(…&tid1);CloseHandle(hThread1);hThread2=CreateThread(…&tid2);//tid1==tid2,甚至hThread1==hThread2
,尽管它们现在引用的是不同的内核对象。只要仍有引用进程或线程的打开句柄,Windows上的PID或TID也将保持有效。这是“一旦内核对象关闭”所暗示的,因为打开句柄也使内核对象保持活动状态,我只是想澄清一下。因此,PID或TID重用只能在进程/线程结束并且引用它的最后一个句柄关闭后发生。一旦您知道线程在其生命周期内可以在不同的内核/处理器上运行,并且ID在这段时间内保持不变,您可以自己推导出答案;-)谢谢为了防止线程ID循环(如果跟踪此线程ID时线程及其句柄可以关闭),可以将其与线程创建文件时间(可通过GetThreadTimes()API获得)耦合。@user843732:以正确的方式完成,可以。我使用这种技术来检查一个进程的父进程PID是否表示它是父进程,而不是一个回收了它的父进程PID的进程。@parrowdice:一个后续问题,伙计们。GetThreadTimes()API返回的
FILETIME
计时没有任何与计时器相关的“抖动”,是吗?文档声称线程创建的价值以“100纳秒时间单位”表示,这是一个非常精确的数字!它不会导致内部计时器开始对该API的不同调用进行取整,是吗?
FILETIME
stuct始终是100ns的刻度。这并不意味着底层API将实际返回相差100纳秒的内容。此外,如果在小于100ns的时间内发生了某些情况,则值可能相同。说了这么多,你为什么关心这种回收?了解这一点可能有助于更好地回答这个问题。(接下来的问题目前令人担忧。各种各样的警钟正在我脑海中敲响,告诉我我们“太聪明了”。:])谢谢链接!MSDN在这里和这里都有很多文档,但显然他们选择在文档中为单个函数隐藏这一重要信息。:)