2010-04-19 183 views
2

我已将非阻塞队列psuedocode here移植到C#。下面的代码意思是文件的逐字逐句副本。测试非阻塞队列

你会采取什么方法来测试实施?

注:我在VS2010中运行,所以我没有CHESS支持。

编辑:

我已经删除有问题的代码,所以一些不知情的开发者不使用它 - 它需要相当多的变化,以拿到免费的bug ......我仍然没有100 %确信它没有bug。通过强力测试,我无法让它比基于锁的解决方案更好地执行。

另外,因为我的目标是3.5,所以我认为我是使用4.0并发队列的SOL。 3.5 RX框架包含一个ConcurrentQueue,所以这确实只是一个有趣的小编程练习,仅此而已。

回答

2

如果您使用VS 2010和.NET 4,则可以使用ConcurrentQueue<T>

+3

问题是如何测试它们的实现。 – Andrey 2010-04-19 19:04:42

+1

是的,但是如果端口是可以避免的,并且你可以免费得到一个很好的,经过测试的实现,它将完全避免这个问题的原因...... – 2010-04-19 19:07:52

+0

不幸的是,我的目标是.NET 3.5。我实际上看了一下他们在反射器中的.NET 4.0实现,并且所讨论的队列采用了完全不同的方法;它是Joe Duffy在他的Parallel Data Structures文章中推荐的算法... – jsw 2010-04-19 19:25:29

2

当我试图创建非阻塞队列我测试队列这种方式。我创建了10个线程并同时被称为Enqueue 1000次。最后我检查了队列的大小,它是!= 10000。或者有时它会抛出异常。然后我尝试了并发deques。同样的结果。这显然意味着队列不是线程安全的。