游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3318|回复: 5

怎样判断一个工作者线程是否空闲?

[复制链接]

60

主题

134

帖子

134

积分

注册会员

Rank: 2

积分
134
QQ
发表于 2007-8-2 07:12:00 | 显示全部楼层 |阅读模式
我看一篇资料,说先判断这个工作线程是否空闲,然后分配任务,但怎样判断空闲没有说明,请问,该怎样判断啊?

8

主题

390

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2007-8-2 11:52:00 | 显示全部楼层

Re:怎样判断一个工作者线程是否空闲?

最初级最简单就是用一个long x=0;
然后:
工作线程:
干活的时候 InterlockedIncrement(x);
干完就InterlockedDecrement(x);
、、、。。。。
外面线程:
判断它是否空闲,就是if(x<=0)就空闲。

60

主题

134

帖子

134

积分

注册会员

Rank: 2

积分
134
QQ
 楼主| 发表于 2007-8-2 20:08:00 | 显示全部楼层

Re:怎样判断一个工作者线程是否空闲?

那这个x是不是需要锁定?本来就有许多锁定操作,这样会不会严重影响系统的性能?

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2007-8-2 20:34:00 | 显示全部楼层

Re:怎样判断一个工作者线程是否空闲?

。。。。Interlocked一族是原子操作。。。

60

主题

134

帖子

134

积分

注册会员

Rank: 2

积分
134
QQ
 楼主| 发表于 2007-8-2 21:11:00 | 显示全部楼层

Re:怎样判断一个工作者线程是否空闲?

刚看了一篇文章,说事件对象运行在内核模式,比如WaitForSingleObject,而临界区对象运行在用户模式。但从用户模式切换到内核模式需要一定的时间,那么这个时间为多少?

0

主题

172

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2007-8-2 21:20:00 | 显示全部楼层

Re:怎样判断一个工作者线程是否空闲?

与其看有没有空闲再分配,还不如工作线程主动去轮询。

PS:可以利用IOCP来管理任务的投递。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 14:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表