免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 5609 | 回复: 36
打印 上一主题 下一主题

[C] 在等待条件信号的线程队列中,怎么能知道如果一调用信号函数就会激活的线程ID? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-19 14:53 |只看该作者 |倒序浏览
pthread_cond_signal 函数激活一个等待该条件的线程,存在多个等待线程时按入队顺序激活其中一个。

怎么知道激活了哪个线程(知道线程ID就行)?
在等待条件信号的线程队列中,怎么能知道如果一调用pthread_cond_signal函数就会激活的线程ID?

论坛徽章:
0
2 [报告]
发表于 2013-01-19 15:31 |只看该作者
这个问题很难么?在实际项目中很多人都会有这个需求吧

论坛徽章:
0
3 [报告]
发表于 2013-01-19 15:46 |只看该作者
实际项目中需要知道哪个线程先被唤醒吗?好像没有这个需求吧?
到底哪个线程被唤醒,只有你那个线程真正被唤醒的时候,你才知道,这是由调度策略决定的,调度策略会衡量线程的优先级、等待时间等因素。

论坛徽章:
0
4 [报告]
发表于 2013-01-19 15:52 |只看该作者
回复 3# sqfasd


有需要知道哪个线程将被唤醒的需求啊,比如,知道触发信号后将唤醒哪个线程,就可以提前为这个线程准备新的数据。

论坛徽章:
0
5 [报告]
发表于 2013-01-19 16:01 |只看该作者
回复 4# iw1210

这是你臆想的需求吧。。。。。。
或者说是你设计上的错误,你真实的需求完全可以通过更合理的设计来实现。

论坛徽章:
0
6
发表于 2013-01-19 16:03
本帖最后由 iw1210 于 2013-01-19 16:05 编辑

回复 5# sqfasd


  逻辑上讲这个需求是合理的啊,你有更好的方案么?

我想应该有这样的函数吧,获取第一个正在等待条件变量信号的线程ID,一旦触发信号,这个线程将被唤醒,没有么?

论坛徽章:
0
7 [报告]
发表于 2013-01-19 16:04 |只看该作者
回复 4# iw1210
线程已经唤醒开始工作了,还去准备数据,这不是马后炮么,已然晚了

如果要唤醒指定线程(以便事先为其做数据准备),那你还用pthread_cond_signal 激活某休眠线程作甚,还不如自己管理线程池
   

论坛徽章:
0
8
发表于 2013-01-19 16:08
回复 7# liuspring6


    我想应该有这样的函数吧,获取第一个正在等待条件变量信号的线程ID,一旦触发信号,这个线程将被唤醒。
怎么提前知道这个将被唤醒的线程ID?有没有办法?

论坛徽章:
0
9 [报告]
发表于 2013-01-19 16:14 |只看该作者
回复 8# iw1210

很怪异的想法,一般线程池大多和消息队列配合使用,pthread_cond_signal 方完全不用管是哪个工作线程处理事务。
如果真要指定线程数据,也一般是自己管理线程池,使用PopFreeThread/SetData/WakeUpThread的模式


   

论坛徽章:
0
10 [报告]
发表于 2013-01-19 16:15 |只看该作者
回复 7# liuspring6

没有方法。也完全没有需要。

你的两个线程如果需要处理不同的数据,为什么要等待同一个条件变量呢?
分明是逻辑混乱啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP