免费注册 查看新帖 |

Chinaunix

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

Linux多线程编程问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-07-07 14:41 |只看该作者 |倒序浏览
在多线程中,有一个线程要实现这样的功能:它的优先级最低,即当其他线程都阻塞时它才运行,但要是在一定时间内,该线程没有执行过,则必须唤醒该线程运行,如何实现?谢谢!!!

论坛徽章:
0
2 [报告]
发表于 2005-07-07 15:07 |只看该作者

Linux多线程编程问题

这个实现起来好像比较困难,但是是不是可以做两个线程,把一个线程的优先级设成最低,另外一个线程做周期调度,同时用个锁保证两个线程只有一个会执行,也就是一个线程没走完一圈,另外一个线程不调度,即使调度也马上再回到初始循环?

论坛徽章:
0
3 [报告]
发表于 2005-07-07 15:20 |只看该作者

Linux多线程编程问题

谢谢楼上的回答
我也想过用这种方法,但会出现一个问题,如果是那个优先级较低的线程取得互斥锁,在运行过程,其他优先级较高的线程可能被唤醒,接着优先级较低的线程可能长时间被阻塞而开法释放锁,这个另一个线程即使周期时间以,但由于无法取得锁,而无法运行

论坛徽章:
0
4 [报告]
发表于 2005-07-07 15:34 |只看该作者

Linux多线程编程问题

设置一个全局变量a=0,假设线程n优先权最低,凡是线程1到n-1运行的过程中给a+1,退出运行则给a-1,那么n线程想运行时去检测a值就可以了,它可以选择运行也可以选择等待

论坛徽章:
0
5 [报告]
发表于 2005-07-07 16:39 |只看该作者

Linux多线程编程问题

你的问题描述不是太清楚。
优先级最低的线程是当所其它线程阻塞时就立刻运行呢,还是当其它线程阻塞时它也要到了调度周期才运行?

论坛徽章:
0
6 [报告]
发表于 2005-07-07 17:32 |只看该作者

Linux多线程编程问题

可能是我的问题没有描述清楚吧,
是这样的: 如果其他线程都阻塞,则线程优先级最低的那个线程立刻运行,但也有可能出现这样的情况,如果其它线程一直在运行的话,那么那个优先级较低的线程可能长时间得不到运行,因些设定一个时间周期,如果在一个时间周期内那个低优先级的线程一直没有运行,则必须得到运行,(当然为了简单,可以不管这个线程在一个周期内是否运行过,到了一个周期的时候,都要运行)。

以上线程基本上都是无限循环执行

论坛徽章:
0
7 [报告]
发表于 2005-07-08 08:51 |只看该作者

Linux多线程编程问题

原帖由 "xin8525" 发表:
可能是我的问题没有描述清楚吧,
是这样的: 如果其他线程都阻塞,则线程优先级最低的那个线程立刻运行,但也有可能出现这样的情况,如果其它线程一直在运行的话,那么那个优先级较低的线程可能长时间得不到运行,?.........


可以这样解决:
线程 t1,t2,...tn-1, tn,   t1优先级最高,  tn优先级最低。
t1 是一个定式执行的线程,不难实现, t1的作用就是太高tn的优先级,并挂起自己(或等待事件)。tn就可以运行了。
tn,中需要判断的执行是由于优先级抬高的运行,还是其他现成的阻塞而自己执行。如果优先级被抬高,则在执行完一遍后恢复自己的优先级,并解挂t1(设置事件,以恢复t1 run)。

不知道可否满足你的有求。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP