測試併發數據結構以確保數據結構在從多個線程訪問時行爲正確的方法有哪些?測試併發數據結構
測試併發數據結構
回答
所有其他的答案都集中在通過把它通過其步伐實際測試代碼,實際上是在這種或那種形式運行,或禮貌地說:「不要自己動手,使用現有的圖書館」。
這是偉大的和所有,但IMO,最重要的(實際測試也很重要)測試是看線代碼和每代碼問「如果我被打斷另一個線程在這裏?「設想另一個線程,在這個中斷期間運行其他任何線路/功能。事情仍然保持一致嗎?競爭資源時,其他線程是否阻塞或旋轉?
這是我們在學習併發性時所做的工作,它是一種令人驚訝的有效方法。最重要的是,我覺得花時間向自己證明事情是一致的,並且在所有州都按照預期工作,這是你在處理這些事情時應該使用的第一種技巧。
我通常由插嘴在分佈式線程/進程的適當位置sleep()
調用test這類事情。
例如,測試一個鎖,把所有的線程sleep(2)
在爭論的焦點,和產卵兩個線程大致間隔1秒。第一個應該獲得鎖定,第二個應該等待。
大多數競態條件可以通過擴展這種方法測試,但如果你的系統有太多的部件可能很難或不可能知道需要測試每種可能的情況。
運行您的併發線程一個或幾天,看看會發生什麼。 (聽起來很奇怪,但找出競爭條件是一個如此複雜的話題,只是嘗試它是最好的方法)。
併發系統是概率性的,錯誤往往難以複製。因此,您需要運行各種輸入/輸出案例,每個案例都經過一段時間(小時,幾天等)的測試,以檢測可能的錯誤。
併發數據結構的測試涉及在預期事件(如插入和刪除)之前和之後檢查容器的狀態。
如果可能,請使用預先存在的,預先測試過的庫,以滿足您的需求。
確保代碼中有適當的自我一致性檢查(最好是快速完整性檢查),並在許多不同類型的硬件儘可能的運行您的代碼,以幫助縮小有趣的時序問題。
有多人同行審查代碼,最好沒有預先解釋它應該如何工作。這樣他們不得不挖掘代碼,這應該有助於捕獲更多的錯誤。
設置一堆線程,除了對數據結構進行隨機操作之外什麼都不做,並且以某種速度檢查一致性。
開始與您的訪問電話/修改數據不是線程安全的,並使用鎖,以確保只有一個線程可以訪問/在同一時間修改數據的任何部分的假設。只有在您能夠證明特定類型的訪問在多個線程同時在鎖之外安全的情況下,您才能將該代碼移出鎖。
假設最壞的情況,例如您的代碼會在某些指針操作或另一個關鍵點中停止,並且另一個線程將在中間轉換中遇到該數據。如果這樣做會有不好的結果,請將其放在鎖內。
- 1. 數據庫結構測試
- 2. C++結構測試
- 3. Journey測量 - 數據結構
- 4. 何時使用arquilian測試時構建數據庫結構?
- 5. 合併數據結構
- 6. neo4j:發現數據結構
- 7. 測試併發性
- 8. JSTestDriver併發測試
- 9. 在mxunit中測試結構數組
- 10. 從數據結構中測試檢索而不進行測試商店
- 11. CodedUI測試項目結構
- 12. 測試和python包結構
- 13. 測試複雜結構
- 14. pagemodel硒測試的結構
- 15. TDD測試結構問題
- 16. 測試用例結構
- 17. 獲取由鼻子發現的所有測試的數據結構
- 18. 如何單元測試結構構造
- 19. java測試數據庫結構:找不到合適的框架
- 20. 與谷歌審覈錯誤結構化數據測試工具
- 21. 爲大型數據結構編寫單元測試
- 22. 培訓和測試數據結構:槌子分類器
- 23. 測試用的std :: equal_to特定結構的數據成員等
- 24. Google結構化數據測試工具和Schema.org
- 25. 性能測試Python數據結構決策
- 26. 單元測試數據結構的內部狀態
- 27. 測試perl中的數據結構和xml
- 28. 作者錯誤谷歌結構化數據測試
- 29. 測驗的數據庫結構如何?
- 30. 軌測試和開發數據庫都在不同的架構
使用其他人爲您驗證過的圖書館? – 2011-02-07 21:29:43
[單元測試實時/併發軟件]可能的重複(http://stackoverflow.com/questions/1733484/unit-testing-real-time-concurrent-software) – 2011-02-07 21:34:48
更多考生:[多線程代碼測試指南或確保代碼是線程安全的](http://stackoverflow.com/questions/4444452/guidelines-for-testing-multithreaded-code-or-ensuring-that-code-is-thread-safe)和[Unit Testing Concurrent代碼](http://stackoverflow.com/questions/2035890/unit-testing-concurrent-code)。這些全部位於右側的* Related *列表中。 – 2011-02-07 21:36:15