多个线程在等待同一个内核对象,当这个内核对象的状态变为有信号的时候,所有等待线程都会变为可运行的吗?

fanchangyong 2011-07-01 01:31:13
如题,多个线程在等待同一个内核对象,当这个内核对象的状态变为有信号的时候,所有等待线程都会变为可运行的吗?
还是只会有一个线程会变成可运行的?
我知道对于事件对象,分为自动重置和手工重置两种,如果是自动重置的,只会有一个线程等待成功,变为可运行的.如果是手工重置的事件对象,则所有等待线程都会变为可运行状态.
而对于信号量,貌似也是只会有一个线程会变为可运行的.
我有疑问的是MUTEX互斥量是怎样的?
还有其他的内核对象,大家知道多少就说多少把,谢谢!
...全文
110 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanchangyong 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kyotrue 的回复:]
MUTEX只有一个等待线程会变为可运行的

对于有疑问的内核对象,查阅MSDN
[/Quote]

恩,谢谢,就是因为我的实验结果和MSDN上说的不一样我才发上来问的.
我的实验结果显示的是,多线程同时等待MUTEX,当它触发的时候,所有线程都会变为可运行的.
至善者善之敌 2011-07-01
  • 打赏
  • 举报
回复
 该函数创建了一个信号量内核对象,最大资源数为10,当前可用资源数为0。由于当前可用资源数为0,所以调用WaitForSingleObject等这些等待函数来等待该信号量句柄的线程都会进入等待状态。

  这些等待函数在内部会查看信号量内核对象的可用资源数,如果该值大于0,则将其减1,线程保持可调度状态,这些比较和设置可用资源数是以原子过程进行的,所以是线程安全的。

  如果可用资源数等于0,则线程进入等待状态,当一个线程将信号量的可用资源数递增之后,某个或某些等待的线程就可以进入就绪状态。
kyotrue 2011-07-01
  • 打赏
  • 举报
回复
MUTEX只有一个等待线程会变为可运行的

对于有疑问的内核对象,查阅MSDN

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧