我用C \ C創建無鎖隊列++,隊列工作正常,但我得到的錯誤時,Visual Studio顯示,它是免費的運轉,並且它崩潰了此功能的Windows堆損壞C++ C
的extern 「C」 _CRTIMP INT __cdecl _CrtIsValidHeapPointer( 常量無效* pUserData)
而且這種情況發生時,尊者很多讀線程(使用自由線程),如果我刪除無它正常工作與任意數量的線程或者如果我把簡單的printf(「隨機東西」); (這有點慢),它適用於任何數量的線程。所以我只是不知道該怎麼辦:(看起來好像很多線程試圖釋放內存窗口無法處理它,這是可以解決的問題嗎?另外,當變量地址變成'magic'時, (0xABABABAB,0xCDCDCDCD ..),我發現,這些也與堆..
在linux中,使用POSIX線程沒有得到任何的問題,正常工作與任意數量的線程。
所以問題爲什麼放慢線程幫助(或這是巧合嗎?),以及如何不會減慢擺脫堆問題 有關堆內存的任何意見,歡迎
聽起來像是你有一個競爭條件,但沒有人能爲你使用的只是一個普通的,線程安全的幫你無需任何代碼 – Collin
只要處理堆來實現隊列,它不是無鎖的。你使用原子進行變量訪問嗎?簡單變量賦值不會跨線程工作。無論它在測試中是否有效 - 在足夠的負載下都會失效。 – ActiveTrayPrntrTagDataStrDrvr
用代碼更新。隊列工作正常,但負載很大,崩潰。並且總是在出隊方法中崩潰。 –