【问题标题】:Thread ID vs. Thread Handle线程 ID 与线程句柄
【发布时间】:2011-07-03 09:09:50
【问题描述】:

线程 ID 和线程句柄有什么区别?为什么两者都需要? Windows 和 Linux 有区别吗?

【问题讨论】:

    标签: windows linux multithreading operating-system


    【解决方案1】:

    ID 是系统中运行的线程的唯一数字标识符。线程句柄与任何内核对象句柄一样,可以看作是一种特殊类型的内核对象引用计数指针。

    所以在内核空间中有一个 THREAD 类型的对象,ID = 12345

    因为你想对线程做一些事情,所以你的地址空间中有一个指针,称为 threadID,值为 44。

    请注意,同一个内核对象的不同句柄具有不同的值(两个指针指向一个对象),并且内核对象可以在多个进程中拥有句柄。

    【讨论】:

      【解决方案2】:

      据我所知,Linux 的 pthread 库没有线程句柄的概念。 pthread_create 和其他 pthreads 函数,返回一个线程 ID。

      在 Windows 下,线程句柄与线程 ID 不同,就像文件句柄与文件名不同。

      线程句柄是一个令牌,它允许您对线程执行某些操作(通常等待或终止它)。 Win32 有很多对象的这些标记,并且通常将它们称为 HANDLE。

      令牌本质上是一个指向正在运行(或已停止)的线程的指针,并具有一组与之相关的能力,例如,您可以拥有一个句柄,允许您等待但不能杀死线程。同理,我们可以有一个只读的文件句柄。

      这种间接级别可能有用,也可能没用,但它是 Win32 的处理方式,并且与它处理某些其他类型对象的方式大体一致。

      【讨论】:

        【解决方案3】:

        线程 ID 是渐进式的(即一个接一个),您可以遍历它。 线程句柄,就像 Windows 中的大多数句柄一样,实际上是指针。 例如,您可以使用线程句柄设置线程属性位 - 但不是线程 ID。

        【讨论】:

          猜你喜欢
          • 2016-05-08
          • 2023-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多