erlang进程间锁机制(如flock)

时间:2013-05-20 15:15:16

标签: erlang flock interprocess

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

用法如下:

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

global:set_lock/1,2,3

  

在LockIquesterId的ResourceId上为指定节点(如果没有指定任何节点)设置锁定。