우리는 동시 작업을 피하고 무결성을 유지하기 위해 자원을 액세스/수정하기 전에 잠글 필요가있는 응용 프로그램의 요구 사항이 있습니다. 리소스에 대해 수행 된 일련의 작업이 있으므로 리소스에 액세스하는 모든 구성 요소가 존중해야하는 응용 프로그램 수준 잠금 개념을 구현하기로 결정했습니다.응용 프로그램 수준 잠금 구현
리소스가 여러 프로세스에 의해 액세스/수정되므로 동기화가 오버 헤드가된다는 점에 유의하십시오. 이것은 응용 프로그램 수준 잠금을 선택하는 이유 중 하나이기도합니다.
응용 프로그램 수준 잠금을 구현하기위한 방법 중 하나는 리소스 이름, 잠금 유형 (읽기 잠금, 쓰기 잠금 또는 전체 배타적 잠금)과 같은 열을 갖는 데이터베이스 테이블의 항목을 삽입하고 업데이트하는 것입니다. 잠금을 획득 한 프로세스에 대한 정보를 제공합니다. 데이터베이스 테이블은 리소스에 액세스하는 모든 프로세스에 집중되는 유일한 구성 요소이므로 옵션으로 선택했습니다. 그러나 누군가 다른 가능성을 탐색 할 수 있다면 도움이됩니다.
데이터베이스 접근 방식의 또 다른 문제점은 구현시 비관적 잠금을 사용해야한다는 것입니다. (우리의 응용 프로그램은 DB 서버로 Oracle을 사용합니다.)
이 질문의 목적은 응용 프로그램 수준 잠금을 구현하는 다양한 방법을 탐색하는 것입니다.
편집 한
나는 데이터베이스 접근 방식은 다양한 응용 프로그램 구성 요소에 의해 수정 액세스
- 자원은 /의 사용자가 동적으로 추가되기 때문에 비관적 잠금이 구현한다는 것을 언급하는 이유 소프트웨어. 따라서 항상이 데이터베이스 테이블에 항목을 삽입하는 것은 추악합니다.
- 리소스 항목이이 테이블에서 만들어진 경우에도 이러한 항목을 언제 삭제합니까?
낙관적 인 잠금 방식이 좋았지 만 구현 방법에 대해 생각할 수 없었습니다. 3 개 잠금 유형
- 읽기 잠금이 있다는 것을 내가 지정하는 위의 문제 문을 업데이트 한 잠금 유형 에 대한 세부 정보를 추가
편집 2 - 취득 할 수있는 모든 다른 잠금 장치 중 하나 경우 읽기 또는 쓰기
- 쓰기 독점 잠금 - 다른 모든 잠금
- 전체 독점 잠금을 읽을 경우 획득 할 수 -이 자원에는 잠금 장치가없는 경우 획득 할 수
어떤 종류의 응용 프로그램 (웹/GUI/CLI/etc?)을 개발하고 프로그래밍 언어로 사용하고 있습니까? – Teekin
glassfish 클러스터에 배포되는 웹 응용 프로그램입니다. Java 프로그래밍 언어로 응용 프로그램을 개발 중입니다 –