Unity C# lock關鍵字的坑 原

Unity 5.6 環境下的 lock關鍵字,在特定的多線程環境下會死鎖 崩潰

其中一種情況:

異步socket 操作,由於內部是一個線程池回調的異步回調,操作同一個對象時 lock關鍵字會概率出現死鎖 閃退,

(發現現象的例子是服務器不斷重啓或者WIFI斷開打開,導致連接斷開客戶端異步任務大量要在主線程執行導致閃退,而主線程保證線程安全的是用關鍵字lock來處理的 (RpcTcpSocket.cs MainThread.cs))

 

解決方案:採用常規的Mutex 來保證線程安全 後 測試沒在出現崩潰

 

猜想原因可能是 異步socket內建的il2cpp線程池和lock關鍵字相互之間有某種概率性BUG 可能池內的非遞歸鎖 線程內死鎖了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章