如题,多个线程在等待同一个内核对象,当这个内核对象的状态变为有信号的时候,所有等待线程都会变为可运行的吗?
还是只会有一个线程会变成可运行的?
我知道对于事件对象,分为自动重置和手工重置两种,如果是自动重置的,只会有一个线程等待成功,变为可运行的.如果是手工重置的事件对象,则所有等待线程都会变为可运行状态.
而对于信号量,貌似也是只会有一个线程会变为可运行的.
我有疑问的是MUTEX互斥量是怎样的?
还有其他的内核对象,大家知道多少就说多少把,谢谢!

解决方案 »

  1.   

    MUTEX只有一个等待线程会变为可运行的对于有疑问的内核对象,查阅MSDN
      

  2.   

     该函数创建了一个信号量内核对象,最大资源数为10,当前可用资源数为0。由于当前可用资源数为0,所以调用WaitForSingleObject等这些等待函数来等待该信号量句柄的线程都会进入等待状态。  这些等待函数在内部会查看信号量内核对象的可用资源数,如果该值大于0,则将其减1,线程保持可调度状态,这些比较和设置可用资源数是以原子过程进行的,所以是线程安全的。  如果可用资源数等于0,则线程进入等待状态,当一个线程将信号量的可用资源数递增之后,某个或某些等待的线程就可以进入就绪状态。
      

  3.   


    恩,谢谢,就是因为我的实验结果和MSDN上说的不一样我才发上来问的.
    我的实验结果显示的是,多线程同时等待MUTEX,当它触发的时候,所有线程都会变为可运行的.