2

Erlang 是否具有进程间(我的意思是 Linux 或 Windows 进程)锁定机制,例如 flock ?

用法如下:

  • Erlang 服务器开始为存储库提供服务,并设置文件锁(或其他)
  • 如果另一个 OS 进程(另一个 Erlang 服务器或命令行 Erlang 脚本)与 repo 交互,则文件锁会警告可能的冲突
4

3 回答 3

5

如果您的意思是在 Erlang 进程之间,不,它具有进程间锁定机制。这不是 Erlang 控制对共享资源的访问的方式。一般来说,如果你想控制对资源的访问,你有一个管理资源的 Erlang 进程,并且对资源的所有访问都通过这个进程。这意味着我们不需要进程间锁或互斥锁来控制访问。这也是安全的,因为您不能“作弊”和访问,并且管理过程可以检测客户是否在交易中间死亡。

于 2013-05-21T15:46:42.707 回答
1

在 Erlang 中,您可能会使用不同的方法来解决这个问题。想到的一件事是保留一个node()处理所有存储库的 Erlang。它有一个lock_mgr执行资源锁管理的进程。

当另一个节点或 escript 想要运行时,它可以通过分布连接到正在运行的 Erlang 节点并请求锁定。

于 2013-05-23T11:37:42.427 回答
0

global可以满足您需求的模块。

global:set_lock/1,2,3

对 LockRequesterId 的 ResourceId 上的指定节点(或所有节点,如果未指定)设置锁定。

于 2013-05-22T21:03:35.423 回答