2010-04-19 229 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。同樣的結果。這顯然意味着隊列不是線程安全的。