在浏览 erlang 应用程序的代码时,我遇到了一个有趣的设计问题。让我描述一下情况,但由于 PIA 抱歉,我无法发布任何代码。
该代码被构造为一个 OTP 应用程序,其中两个gen_server
模块负责分配某种资源。该应用程序在一段时间内完美运行,我们并没有真正遇到大问题。
当第一个gen_server
需要检查第二个是否有足够的资源时,棘手的部分就开始了。Acall
被发布到第二个 gen_server,它本身调用一个实用程序库(在非常非常特殊的情况下)call
向第一个 gen_server 发布 a。
我对 erlang 比较陌生,但我认为这种情况会让两个 gen_server 互相等待。
这可能是一个设计问题,但我只是想知道 OTP 中是否有任何特殊机制可以防止这种“挂起”。
任何帮助,将不胜感激。
编辑:总结答案:如果您遇到两个彼此循环的情况,您最好在应用程序设计中花费更多时间gen_server
。call
谢谢你的帮助 :)