2013-05-20 7 views
2

Erlang에는 flock과 같은 프로세스 간 (Linux 또는 Windows 프로세스를 의미 함) 잠금 메커니즘이 있습니까?프로세스 간 잠금 메커니즘 (예 : flock)

다음과 같이 사용은 다음과 같습니다

  • 얼랑 서버가 저장소를 제공하는 시작하고, 경우 파일 잠금 (또는 무엇이든)
  • 을두고 다른 OS 공정 (다른 얼랑 서버 또는 명령 행 Erlang 스크립트)가 repo와 상호 작용하면 파일 충돌로 인해 충돌 가능성이 경고됩니다.

답변

5

Erlang 프로세스 사이에 있음을 의미하는 경우 프로세스 간 잠금 메커니즘이 있습니다. 이것은 공유 자원에 대한 액세스를 제어하는 ​​Erlang의 방식이 아닙니다. 일반적으로 리소스에 대한 액세스를 제어하려면 리소스를 관리하는 Erlang 프로세스가 있으며이 프로세스를 통해 리소스에 대한 모든 액세스가 이루어집니다. 즉, 액세스를 제어하기 위해 프로세스 간 잠금 또는 뮤텍스가 필요하지 않습니다. 또한 "속임수"를 쓰지 않고 액세스 할 수 있기 때문에 안전합니다. 트랜잭션 처리 도중에 클라이언트가 죽는다면 관리 프로세스에서이를 감지 할 수 있습니다.

+0

나는 OS 프로세스를 의미했습니다. 내 질문을 업데이트하고 세부 정보를 추가하겠습니다. – user803422

0

귀하의 요구에 맞는 모듈 global가 있습니다.

global:set_lock/1,2,3

는 LockRequesterId에 대한의 ResourceId에 지정된 노드 (또는 지정하지 않은 경우 모든 노드)에 대한 잠금을 설정합니다.

1

얼랑 (Erlang)에서는 아마도이 문제를 해결하는 다른 방법을 사용하게 될 것입니다. 한 가지 기억해야 할 것은 모든 저장소를 처리하는 Erlang을 하나만 유지하는 것입니다. node(). 리소스 잠금 관리를 수행하는 프로세스는 lock_mgr입니다.

다른 노드 또는 escript가 실행되기를 원할 때, 실행중인 Erlang 노드에 배포를 통해 연결하고 잠금을 요청할 수 있습니다.