考慮一些Mutex類實現的測試用例。測試在執行期間創建了幾個std :: thread實例。如果根據測試正確實施Mutex類,則所有線程都應該完成。如果出現問題,則可能一個線程可能無限期地被阻塞。測試如何正確清理後自己?在自動測試後安全地清理阻塞std :: thread
起初我以爲分離線程,但隨後線程泄漏。更糟糕的是,線程依賴於測試用例內部的Mutex實例,在測試用例返回後偶爾會導致訪問衝突。有些線程庫在Qt的QThread中有terminate()方法,但是我想使用std :: thread,即使Qt已經是我的項目的依賴項了。
是否存在測試潛在無限期阻塞併發代碼的一般模式?
析構函數如何包裝測試方法來解決問題?如果std :: thread實例的析構函數在這個包裝析構函數中運行,那麼你仍然有一個銷燬正在運行的std :: thread的問題,導致你的整個應用程序被終止(崩潰)。 –
我在線程實例的析構函數中沒有想到,可能是任何可以訪問線程處理函數的析構函數(在最糟糕的情況下都是這樣),這個問題的解決方案是收斂的(在我見過的實現的90%中)使用專用進程檢查線程中的問題,因爲之前的ShadowRanger註釋可以使用該析構函數進行特別的測試,而不是在析構函數中運行進程。 http://stackoverflow.com/questions/29178435/safely-destroying-a-thread-pool?rq=1 檢查這一點,它是不一樣的,但會有所幫助。 –