为啥说线程对象的默认(初始)句柄数为2 ?
谁能解释一下。

解决方案 »

  1.   

    线程对象的默认初始值是2
    如果你在创建线程时
    不传递create_suspend
    系统进行初始化后
    便会将记数减1而不是你传递create_suspend后
    系统将记数加1
      

  2.   

    不是说句柄数是2,而是线程内核对象中的引用计数器为2,其实它还有一个使用计数器,是3。
    在创建一个线程后,因为有了线程,所以这个内核对象的引用计数器为1,使用计数器也为一,又因为用CreateThread()返回了一个句柄,所以引用计数器加1,使用计数器加2。
      

  3.   

    在线程对象只是在系统中的一个TCB吧?
    当一个线程被创建时,创建它的父线程拥有这个句柄,线程本身也拥有这个句柄,所以应该是2
      

  4.   

    to :回复人: lianglp()  恩,为啥使用次数加 2 ?
      

  5.   

    首先说明:
    引用计数器是指所有引用此内核对象的次数;
    使用计数器是指此内核对象的句柄使用计数器加上内核对象引用计数器。内核对象由对象管理器进行管理,它要进行管理,必须知道对象在做什么,它也知道对象在做什么。
    比如线程内核对象,要创建描述此线程的一个内核对象,这时,它把引用计数器设置为1,然后当CreateThread()返回的时候创建了一个句柄对象,所在这时引用计数器又加1等于2,而这时句柄计数器也加上1,所有使用计数器就等于3。
    当然,对象管理器在管理对象的时候,有一个字段叫引用计数器,另一个字段叫句柄使用计数器,当我们打开得到一个内核句柄的时候,句柄使用计数器加上1,引用计数器也加1,上边说的使用计数器是本人加的,对象管理器里面只有引用计数器和句柄使用计数器字段。