Unity C# lock关键字的坑

in 编程
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9

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

其中一种情况:

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

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

 

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

 

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

关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9
扫一扫关注公众号添加购物返利助手,领红包
Comments are closed.

推荐使用阿里云服务器

超多优惠券

服务器最低一折,一年不到100!

朕已阅去看看