死鎖不是你應該檢查的唯一東西。死鎖總是很快被檢測到 - 你的應用停止。丟失或重複的消息更加危險和隱晦 - 與du發生時相比,duped消息可能會導致應用程序崩潰的時間晚得多,並且很可能是在與dup發生的位置不同的模塊/線程/塊中。這樣的錯誤是絕對的噩夢。
測試隊列類時,我創建了一個帶有內部隨機數組[256]成員和校驗和的'Message'類。我最初創建了10000條這些消息,'totalChecksum'它們各自的校驗和,並將它們的指針推送到'池'隊列中。多個生產者(我通常使用32),從池隊列中彈出*消息實例,並將它們推送到另一個'通信'隊列中。多個使用者(我通常使用16)pop *來自通信隊列的消息實例,並將它們推回到緩衝池隊列中。
熱身房間5分鐘後,一個簡單的GUI窗體計時器通過設置一個揮發性布爾值來暫停生產者,該布爾值告訴生產者等待manualResetEvent。休眠(500)後,所有10000條消息應該回到池隊列中,並且GUI檢查池的隊列計數是10000,在循環中彈出10000條消息,總計檢查它們,推回來,最後與最初的總檢查項進行比較。如果通過,則重置布爾值併發出MRE信號,以使生產者再次運行。
我一再運行這個測試過夜。如果有任何失敗,該隊列不適合用途。