【发布时间】:2011-05-03 15:00:57
【问题描述】:
我有一个具有挑战性的问题要请教各位大专家。这在我的代码中还没有实际使用,但来自我刚刚的一个想法。
如果我有一个IList<T>,我如何实现一个随机遍历列表并且可以被多个线程同时使用的枚举器?
例如,如果我有元素 A、B、C、D、E、F 和两个并发线程在列表上执行 for-each 循环并获得了 ReaderLock (所以我确信没有其他人会触及列表从而导致异常),我希望他们各自的周期返回,例如,B、E、C、D、A、 F 和 E、B、D、C、A、F。
我需要这个的原因是因为我需要在List<SslStream> 元素上加锁以向客户端because SslStream is not thread-safe 发送数据。随机选择元素(但要确保我选择它们全部)降低了锁冲突的可能性,并且应该提高 I/O 绑定操作的性能。
请记住,即使我告诉你为什么我需要这样一个枚举器,我仍然喜欢挑战。可以有其他方式将相同的数据发送到多个客户端,但我的问题仍然是一样的 :) :)
【问题讨论】:
-
喜欢挑战没关系。但是,有可能没有人能提供具有这些限制的良好解决方案。做好准备:)
标签: c#