【发布时间】:2013-05-20 15:15:16
【问题描述】:
Erlang 是否有进程间(我是指 Linux 或 Windows 进程)锁定机制,例如flock?
用法如下:
- Erlang 服务器开始为存储库提供服务,并设置文件锁(或其他)
- 如果另一个 OS 进程(另一个 Erlang 服务器或命令行 Erlang 脚本)与 repo 交互,则文件锁定会警告可能的冲突
【问题讨论】:
标签: erlang flock interprocess
Erlang 是否有进程间(我是指 Linux 或 Windows 进程)锁定机制,例如flock?
用法如下:
【问题讨论】:
标签: erlang flock interprocess
如果你的意思是在 Erlang 进程之间,不,它具有进程间锁定机制。这不是 Erlang 控制对共享资源的访问的方式。一般来说,如果你想控制对资源的访问,你有一个管理资源的 Erlang 进程,并且对资源的所有访问都通过这个进程。这意味着我们不需要进程间锁或互斥锁来控制访问。这也是安全的,因为您不能“作弊”和访问,并且管理过程可以检测客户是否在交易中间死亡。
【讨论】:
在 Erlang 中,您可能会使用不同的方法来解决这个问题。想到的一件事是保留一个处理所有存储库的 Erlang node()。它有一个lock_mgr 进程来管理资源锁。
当另一个节点或escript要运行时,它可以通过分发连接到正在运行的Erlang节点并请求锁定。
【讨论】:
有模块global 可以满足您的需求。
global:set_lock/1,2,3
在 LockRequesterId 的 ResourceId 上对指定节点(如果未指定,则在所有节点上)设置锁定。
【讨论】: