如果我有一个Win32线程,我通过一个句柄引用它,也可以获得它的线程ID。
即使线程已经终止, 句柄仍然有效且可用,直到closures句柄。 (否则,不能使用例如GetExitCodeThread
但似乎文档并没有一致地提到线程终止之后线程ID“发生了什么”,但是只要任何人仍然拥有终止线程的线程句柄。
线程句柄和标识符声明
linux,了解setsockopt()PACKET_FANOUTnetworking缩放
multithreadingepoll
如何在windows上select()中取消等待
在multithreading程序中将手表添加到Inotify中
AndroID / linux线程join超时
标识符从线程创build到线程终止的时候都是有效的。
当我们查看GetThreadID API时,我们可以想象一下,如果ID只有在线程终止时才会有效,那么终止线程会返回什么样的结果。 (也有一个用户在这个网站上的评论:“是不正确的,只要有一个打开的句柄的线程,它的线程ID仍然是有效和唯一的。”这是否回答这个问题是的,但没有更多我很警惕。)
另外,我在这里find了这个片段的答案:
ID是在系统中运行的线程的唯一数字标识符。 像任何内核对象句柄一样,线程句柄可以看作是指向内核对象的特殊types的引用计数指针。
如果这是正确的,并且线程ID实际上是内核对象的ID,那么似乎只要任何句柄打开(因为内核对象需要留在那里待查询),就需要该ID保持有效。
我的理由是什么? 只要任何句柄打开,线程ID是否有效? 是否有任何 MS文档或权威书籍明确指出这两者之一?
使用CreateThread()在C中进行线程处理
线程安全和AfxMessageBox
g ++ 4.8.1 C ++线程,std :: system_error – *** 作不允许?
windows中的用户空间APC队列长度
更改MFC对话框从STA到MTA?
注意:
在线程终止之前,它的线程标识符在系统上唯一标识它。“
一个线程,ThreadProc已经退出,但它的句柄仍然有效,还没有关闭,仍然有它的原有的有效标识符,直到最后一个句柄被关闭
您仍然可以执行反向查找“按线程标识符处理” – 如果您有线程标识符,则可以通过调用OpenThread函数来获取线程处理。
所以一个标识符只能在最后一个线程句柄关闭后重用(也就是说,你的假设是正确的)。
总结以上是内存溢出为你收集整理的只要线程的任何句柄都处于打开状态,线程标识是否保持唯一/有效?全部内容,希望文章能够帮你解决只要线程的任何句柄都处于打开状态,线程标识是否保持唯一/有效?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)