关于信号量的一个基础问题

Damn_boy 2013-08-13 05:20:47
假如我创建了一个信号量并初始化为0
HANDLE hSem = ::CreateSemaphore(NULL, 0, 0xFFFFFFFF, NULL);


假如现在有5个后台线程同时在等待这个信号量
WaitForSingleObject(hSem, INFINITE);

假如现在有个线程将信号量置1
ReleaseSemaphore(hSem);

那么接下来这5个的线程将如何执行?
假如有10个cpu 这5个线程都在执行中 那么 这5个线程会同时从WaitForSingleObject返回吗?

假如我只有一个cpu 那是不是只有一个后台线程会从WaitForSingleObject中返回了?
那如果我希望在在将信号量置1的时候 只有一个后台线程会从WaitForSingleObject中返回 要如何做?

刚开始接触多线程, 问的问题比较白痴,还请见谅。
...全文
152 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rabbitjerry 2013-08-13
  • 打赏
  • 举报
回复
算是PV语句了吧?看看PV语句怎么说的,貌似一个负责加1,一个负责减1. 貌似学过1对1的,1对多还没见过,可以建立多个信号量,分给多对进程组合。
大尾巴猫 2013-08-13
  • 打赏
  • 举报
回复
信号量置1,那么只有1个线程能抢到这个信号量,并且信号量-1 其余的线程只能继续等待。
max_min_ 2013-08-13
  • 打赏
  • 举报
回复
不会,只会给其中一个!
赵4老师 2013-08-13
  • 打赏
  • 举报
回复
《Windows核心编程》

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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