Mutex的4个错误 - 普遍使用方案1.锁/解锁对的锁定/解锁对不会出现,可能会出现,或者是由于解锁的静音症状,这可能会引起恐慌。
忘了解锁
锁定锁定的情况通常被锁定或评论。
例如:
错误结果:
2.在使用同步软件包下使用同步原语后,副本使用的静音实际上是不舒服的。原因是Mutex是状态。一个新变量,也许该变量一旦初始化就可以锁定,这显然是不合理的。
例如:在下面调用FOO函数时,呼叫者将将Mutex变量C的参数复制为FOO函数。不幸的是,在复制之前已使用此锁。它将导致死锁。
错误结果:幸运的是,有一个Go Coroutine检查机制。程序运行后,它将迅速失败而不是总是生活。
当然,GO VET指令不希望该程序在发现僵局之前运行。我们可以在运行GO VET指令之前检查我们的代码是否有锁定副本问题:
检查原理检查是通过Ocopylock Analyzer通过静态分析来实现的。此分析仪分析功能呼叫,范围遍历,复制,声明,功能返回值等的位置。
通过源代码,我们可以看到已经实现了锁定或解锁接口支持Copylock的结构。
3.重新输入的静音与Java中的重新输入锁具有复发功能,主要是因为Goroutine具有此锁的实现中没有标签位置,因此Mutex是一个不可替代的锁,并且一旦误用了Mutex的Mutex的Mutex's的lutex,静音 - 输入将报告错误。
例如:
错误结果:我们可以看到,当您尝试再次在条方法中获取锁定时,您将无法获得它,从而触发死锁。
4.在执行过程中,由于竞争共享资源的竞争,在执行过程中两个或更多过程(或线程,Goroutine)处于相互等待的状态。如果没有外部干扰,他们将无法进步。这时我们说该系统处于僵局状态,或者系统有僵局。
如果死锁产生的四个必要条件是避免死锁,我们只需要考虑如何打破以下条件即可。
例如:在这里,我们申请居住许可证业务,给出一个简单的循环,等待僵局的例子:
错误结果:
解决策略1.您可以引入第三方锁。每个人都依靠这个锁来进行业务处理,例如由政府促进的一个停滞的政府服务中心2。例如,为了解决等待的问题,社区不需要看到在线签名中心的证明即可开设居住证书。
原始:https://juejin.cn/post/710153169269895986