經過排查發現相同的連接配接套接字會被處理多次,
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiQ3chVEa0V3bT9CX5RXa2Fmcn9CXwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwVPVpWTzUkeNpXWq1kZShVW1xmMjZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zNwQzNyQjM1EjNyEDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
在發送完圖檔後會删除相應圖檔,是以最終導緻段錯誤。不使用線程池發現請求隊列的加鎖沒有問題,是以問題定位到線程池部分。
最終發現是線程池中加速力度不夠,在往線程池中添加任務時,一部分代碼沒有在鎖内,導緻出錯。
另一個錯誤是傳遞給線程池中工作線程的參數是局部變量的指針,當傳遞給工作線程時他沒有能夠立即執行,有其他線程搶占,是以該記憶體位址中的值已經變化了,擷取的是變化之後的變量值,最終出現段錯誤。
修改方法:建立一個全局資料,每次傳給工作線程時都選擇不同的數組值,這樣就避免了在同一位址取值。