쓰레드의 동기화(3): Lock과 Condition을 이용한 동기화
·
자바/프로세스와 쓰레드
1. Lock 클래스 - synchronized 블럭 외에도 'java.util.concurrent.locks' 패키지가 제공하는 lock 클래스들을 이용하는 방법이 있다. - synchronized 블럭으로 동기화를 하면 자동적으로 lock이 잠기고 풀리며 심지어 예외가 발생하여도 lock은 자동으로 풀린다. - 그러나, 같은 메서드 내에서만 lock을 걸 수 있다는 제약이 있어서 불편할 때가 있다. - 그럴 때 아래와 같은 lock 클래스의 종류 3가지를 사용한다. 클래스 설명 ReentrantLcok 재진입이 가능한 lock, 가장 일반적인 배타 lock ReentrantReadWriteLock 읽기에는 공유적이고, 쓰기에는 배타적인 lock StampedLock ReentrantReadWriteL..
쓰레드의 동기화(1): Critical Section & Lock, snychronized
·
자바/프로세스와 쓰레드
1. Critical Section과 Lock - 싱글 쓰레드 프로세스의 경우 하나의 쓰레드가 자원을 가지고 작업하기 때문에 별 문제가 없지만, 멀티 쓰레드 프로세스의 경우 같은 프로세스 내의 자원을 공유해서 작업하기 때문에 서로 영향을 주게 된다. - 쓰레드 A,B가 있다고 가정해보자. 쓰레드 A가 공유 데이터를 작업하는 도중 쓰레드 B가 제어권을 얻어 공유데이터를 변경하게 된다면, 사용자는 다른 결과를 얻게 될 것이다. - 이러한 일이 발생하는 것을 방지하기 위해서 한 쓰레드가 작업을 끝마치기 전까지 다른 쓰레드에 의해 방해받지 않도록 하는 것이 필요하다. - 그래서 도입된 개념이 바로 Critical Section과 Lock이다. ( 앞으로 간단하게 부르기 위해 전자는 CS를 후자는 L이라고 지칭한..