Unity C# lock关键字的坑

梦想游戏人
目录:
Unity

Unity 5.6 环境下的 lock关键字,在特定的多线程环境下会死锁 崩溃

其中一种情况:

异步socket 操作,由于内部是一个线程池回调的异步回调,操作同一个对象时 lock关键字会概率出现死锁 闪退,

(发现现象的例子是服务器不断重启或者WIFI断开打开,导致连接断开客户端异步任务大量要在主线程执行导致闪退,而主线程保证线程安全的是用关键字lock来处理的 (RpcTcpSocket.cs MainThread.cs))

解决方案:采用常规的Mutex 来保证线程安全 后 测试没在出现崩溃

猜想原因可能是 异步socket内建的il2cpp线程池和lock关键字相互之间有某种概率性BUG 可能池内的非递归锁 线程内死锁了

Scroll Up