임계구역
- 운영체제의 임계구역과 자바에서의 임계구역은 개념적으로 유사합니다.
- 구현방식과 사용하는 문맥에서 차이가 있다고 합니다.
공유자원
- 임계구역에 대해 설명하기 전에 공유자원에 대해 알아야 합니다.
- 공유자원은 프로세스들이 함께 이용하는 변수, 메모리 등을 말합니다.
- 프로세스들이 함께 사용할수 있어서 어떤 프로세스가 먼저 데이터를 읽느냐에 따라 결과가 달라집니다.
운영체제에서의 임계구역
- 다중 프로세스 또는 다중스레드 환경에서 공유 자원에 대한 접근을 조율하기 위해 사용됩니다.
- 주로 세마포어나 뮤텍스와 같은 동기화 기법을 사용하여 구현합니다.
- 사용하는 이유는 공유 자원에 동시에 접근하는 경우가 있어 안전한 동작을 보장하기 위해 사용합니다.
- 특성으로는 상호배제, 한정대기, 진행이 있습니다
임계구역 특성
상호배제:
하나의 프로세스 또는 스레드가 임계구역에 들어가면 다른 프로세스나 스레드는
임계구역에 들어갈 수 없는 것을 말합니다.
한정대기:
어떤 프로세스 또는 스레드가 무한히 뒤로 미루어지면 안되는것을 말합니다.
진행:
프로세스 혹은 스레드가 다른 프로세스 또는 스레드의 진행을 방해해서는 안되는 것을 말합니다.
임계구역에 진입을 요청한 후부터 실제로 들어갈 때까지의 대기시간이 유한해야 합니다.
자바에서의 임계구역
- 멀티스레드 프로그램에서 단 하나의 스레드만 실행 할수 있는 코드영역을 임계영역이라고 합니다.
- 공유 자원을 안전하게 접근하기 위한 코드영역을 말하기도 합니다.
- 임계구역 관리를 제대로 하지 못할시 여러 스레드가 동시에 데이터를 변경하거나 접근하면서 원치 않는 결과가
발생할 수 있습니다. - 임계영역을 지정하기 위해 동기화 메소드를 제공합니다.
예시
쉽게 예시를 들어보겠습니다.
한 마을에 공동으로 사용하는 맷돌 한개가 있는데
여러 사람들이 동시에 사용하는 경우 어떤 사람은 맷돌을 시계방향으로, 또 다른 사람은 반시계 방향으로
같이 돌리다 보니 맷돌이 움직이지 않고 원치 않는 결과가 발생하는 것입니다.
이를 해결하기 위해 1번주민이 맷돌을 사용하면 2번 주민은 대기하고
1번 주민이 맷돌을 다 사용했으면 2번 주민이 맷돌을 사용하는 식으로 해결할 수 있을 것입니다.
여기서 맷돌을 임계구역이라고 비유할 수 있을 것입니다.
'프로그램및 언어 > JAVA' 카테고리의 다른 글
[Java] 변수(원시변수 와 객체 레퍼런스)에 대해 알아보자_1 (0) | 2024.02.29 |
---|---|
[Java] Random 클래스로 알파벳을 무작위로 나오게 하기 (0) | 2024.02.22 |