erlangアプリケーションのコードを閲覧しているときに、興味深い設計上の問題に遭遇しました。状況を説明させていただきますが、PIAの関係でコードを投稿できません。
コードは、2つのgen_server
モジュールが何らかのリソースの割り当てを担当するOTPアプリケーションとして構造化されています。アプリケーションはしばらくの間完全に実行され、大きな問題は発生しませんでした。
トリッキーな部分は、最初の人がgen_server
2番目の人に十分なリソースが残っているかどうかを確認する必要があるときに始まります。Acall
は、(非常に特殊なケースで)call
最初のgen_serverに発行するユーティリティライブラリを呼び出す2番目のgen_serverに発行されます。
私はerlangに比較的慣れていませんが、この状況では2つのgen_serverが互いに待機するようになると思います。
これはおそらく設計上の問題ですが、この種の「ハング」を防ぐことができる特別なメカニズムがOTPに組み込まれているかどうかを知りたかっただけです。
どんな助けでもいただければ幸いです。
編集:答えを要約するには:2つが周期的に相互に関係している状況でgen_server
はcall
、アプリケーションの設計にもう少し時間を費やしたほうがよいでしょう。
ご協力いただきありがとうございます :)