on
크리티컬 섹션(Critical Section)
임계 영역
임계 영역이란, 멀티쓰레드 환경에서 다수의 쓰레드들이 동시에 어떤 코드를 실행할 때, 각 쓰레드들이 서로 다른 결과를 내놓는, 동시 접근 문제가 발생할 수 있는 코드의 한 부분(영역)이다.
한 애플리케이션에서 다수의 쓰레드를 실행하는 일이 스스로 문제를 유발하는 것은 아니다. 문제는 다수의 쓰레드가 같은 자원에 접근할 때 발생한다. 여기서 같은 자원이란, 같은 메모리(변수, 배열, 혹은 객체), 시스템(데이터베이스, 웹서비스 등등), 또는 파일을 말한다.
하나 이상의 쓰레드가 자원에 접근하여 쓰기 작업을 수행할 때 문제가 발생한다. 다수의 쓰레드가 같은 자원에 접근하더라도, 자원에 변경(수정)을 시도하지 않는 한 문제는 발생하지 않는다.
다음 자바 코드는 임계 영역 예제이다. 이 코드는 멀티쓰레드로 동시에 실행될 때 문제가 발생할 수 있다.
public class Counter {
protected long count = 0;
public void add(long value) {
this.count = this.count + value;
}
}
두 쓰레드 A, B가 있고 이 쓰레드들이 Counter 클래스의 add() 메소드를 호출하는 상황일 떄, 명령 시스템이 두 쓰레드 중 어느 쪽을 언제 실행할지 알 수 있는 방법은 없다. 위 코드에서 add() 메소드는 atomic instruction으로 실행되지 않는다.
자바에서는 이러한 임계영역의 처리를 위해 Synchronized 키워드가 제공된다.
임계 영역에 접근하는 기능을 가지고 있는 메소드 앞에 Synchronized 키워드를 붙이면 자동으로 임계영역 설정이 되어 한번에 하나의 쓰레드에게만 접근을 허용할 수 있다.
메소드 전체를 임계영역으로 설정할 수도 있고, 특정한 영역을 임계영역으로 설정(객체의 참조변수)할 수도 있다.
Comments
CS 의 다른 글
-
HTTP 헤더 - 캐시와 조건부 요청 03 Jan 2022
-
HTTP 헤더 - 일반 헤더 26 Dec 2021
-
HTTP 상태코드 20 Dec 2021
-
HTTP 메서드 활용 17 Dec 2021
-
HTTP 메서드 12 Dec 2021
-
HTTP 기본 09 Dec 2021
-
URI와 웹 브라우저 요청 흐름 08 Dec 2021
-
인터넷 네트워크 06 Dec 2021
-
Single LinkedList 01 Oct 2021
-
ArrayList 24 Sep 2021
-
List Interface(리스트 인터페이스) 23 Sep 2021
-
자바 컬렉션 프레임워크 20 Sep 2021
-
면접 기초 질문 리스트 31 Aug 2021
-
인프라 기초 총정리 14 Aug 2021
-
하드웨어와 네트워크 기초 지식 03 Aug 2021
-
오버레이 네트워크(Overlay Network) 02 Aug 2021
-
이건 꼭 알고 가자! 면접 출제 빈도가 높은 질문들 19 May 2021
-
1분 자기소개 19 May 2021
-
백엔드 개발자 면접 / 학습내용 15 Feb 2021
-
너비 우선 탐색(breadth-first search, BFS) 22 Oct 2020
-
깊이 우선 탐색(depth-first search, DFS) 10 Oct 2020
-
크리티컬 섹션(Critical Section) 10 Sep 2020
-
삽입 정렬(Insertion Sort) 04 Sep 2020
-
선택 정렬(Selection Sort) 04 Sep 2020
-
거품 정렬(Bubble Sort) 04 Sep 2020
-
LRU 알고리즘 31 Aug 2020
-
Stack, Queue 29 Aug 2020
-
awk 명령어 사용법 24 Aug 2020
-
grep 명령어 사용법 23 Aug 2020
-
DNS의 이해 14 Aug 2020
-
대칭키와 공개키 10 Aug 2020
-
HTTP & HTTPS 10 Aug 2020