一面试题,10条通讯管道,通讯时候遍历所有通讯管道,遇到空闲的管道让它工作,状态设置成忙碌,工作完毕状态设置成空闲,这样出现的问题是前几条管道总是处于忙碌状态,问什么办法解决这种问题,让工作分布的均匀些
解决方案 »
- C# 做类似于QQ的东东, 有关线程的询问哈, 没多少分,有热心的来看看哈,也许可以难倒你!
- RadioButton事件如何获取?
- 关于如何在dll中访问调用该dll类的某个值问题
- Guard.ArgumentNotNullOrEmpty 什么意思?
- C#做类似hidetoolz那样的进程隐藏工具,如何实现?
- 优化代码!
- vs2005中 winform的dataGridView中DataGridViewCheckBoxColumn列类型的问题
- C#转换二进制码的问题?(在线等急。。。。。。。。。。)
- 求一个正则表达式
- c#菜单中隐藏之后上下滚动出现怪现象
- 关于失败重试的问题
- C#如何以时间(datetime)为查询条件?
产生一个1到n的随机数m,
找到第m个空闲管道,使用
SortedList WWW = new SortedList<管道序号, 时间>();
当通讯信道由忙碌变为空闲时将管道序号及此时时间存进 WWW;
当通讯信道由空闲变为忙碌时从 WWW 中删除相应的管道项;
每次调用前历遍 WWW ,调用时间最早的管道;//第一轮不用历遍,直接按顺序一个管道一个管道地调用,直到所有管道都调用过一次.
[/code]
WWW 里存放的都是空闲的管道,且记录着上次使用完的时间,每次都取其中时间最早者,保证能平均分摊管道压力,不妨试试看.
原理是这样,不过实现方法有很多种,上边的只是个不严谨的参考.
[
SortedList<int, DateTime> WWW = new SortedList <管道序号, 时间>();
当通讯信道由忙碌变为空闲时将管道序号及此时时间存进 WWW;
当通讯信道由空闲变为忙碌时从 WWW 中删除相应的管道项;
每次调用前历遍 WWW ,调用时间最早的管道;//第一轮不用历遍,直接按顺序一个管道一个管道地调用,直到所有管道都调用过一次.
WWW 里存放的都是空闲的管道,且记录着上次使用完的时间,每次都取其中时间最早者,保证能平均分摊管道压力,不妨试试看.
原理是这样,不过实现方法有很多种,上边的只是个不严谨的参考.
while (pipe.useingPipeSize() < N && !pipe(i).isUsing()) {
i = (i + 1) % N;
}
初始状态10个管道都是空闲的,list中初始的顺序就是0,1,2,3,4,5,6,7,8,9
循环这个list中的记录去安排工作,当一个管道工作除了改状态为忙碌外再把他在数组中的位置放到最后一个
就是说遍历的时候并不是按照管道的序号来遍历的还是按照list中的顺序(或者说是优先级顺序来遍历).