Synchronization(동기화) - 임계영역(Critical Section), 동기화 방법, synchronized 흐름도

CODEDRAGON Development/Java

반응형

 

스레드의 동기화 문제

스레드의 동기화 문제는 다중 스레드일 때 발생가능하며 여러 스레드가 동시에 실행 될 때 2개 이상의 스레드가 동일한 데이터에 접근하여 작업할 경우 문제가 발생할 수 있습니다.

그러므로, 하나의 스레드가 조작하고 있는 공유자원(변수, 데이터)를 다른 스레드가 조작하지 못하도록 하기 위해서 동기화가 필요합니다.

 

동기화 문제 발생


 

 

동기화 처리


 

 

 

Synchronization(동기화)

·       임계영역(Critical Section)에서 스레드들이 순서를 갖춰 자원을 사용하게 하는 것을 동기화하고 합니다.

·       임계영역이란 멀티 스레드에 의해 공유자원이 서로 참조될 수 있는 코드의 범위를 말합니다.

·       , 한 쓰레드가 작업중 다른 쓰레드에 의해 간섭을 받지 못하도록 막는 것을 쓰레드의 동기화하고 합니다.

·       멀티 스레드 프로그램에서 임계영역을 제대로 처리하지 못 하는 경우 심각한 문제가 발생할 수 있습니다.

·       이러한 문제 상황을 해결하는 방법이 동기화를 이용하는 것입니다. 그래서 하나의 자원을 한번에 하나의 스레드만 사용하도록 하는 기술입니다.

·       동기화 메소드를 구현하기 위해서는 synchronized 키워드를 사용하여야 합니다.

·       동기화 메소드를 스레드가 호출할 경우 이미 접근한 스레드가 작업을 완료할 때까지 기다려야 접근할 수 있습니다.

 

·       동기화를 처리하기 위해 모든 객체에 락(lock)을 포함 시켰습니다.

·       (lock)이란 공유 객체에 여러 스레드가 동시에 접근하지 못하도록 하기 위한 것으로 모든 객체가 힙 영역에 생성될 때 자동으로 만들어 집니다.

 

 

 

synchronized 흐름도


 

 

 

Thread 관련 용어

구분

설명

공정

(fairness)

여러 개의 스레드가 하나의 컴퓨팅 자원을 사용하기 위해 동시에 접근하는 프로그램을 작성할 경우 모든 스레드는 공정하게 그 자원을 사용할 수 있도록 해 주어야 합니다.

기아상태

(starvation)

하나 또는 그 이상의 스레드가 자원을 얻기 위해 Blocked 상태에 있고, 그 자원을 얻을 수 없게 되면 다른 작업을 못하는 상태를 말합니다.

교착상태

(deadlock)

두 개 이상의 스레드가 만족하지 못하는 상태로 계속 기다릴 때 발생합니다.

경쟁상태(race condition)

여러 쓰레드가 lock(제어권)을 얻기 위해 서로 경쟁하는 상태를 말합니다.

 

 

 

Thread를 사용할 경우 주의

·       가급적 공유자원 만들지 말 것.

·       공유자원을 만들 경우 반드시 적절한 방법으로 동기화 할 것.