공유 자원의 개념
공유 자원은 다수의 스레드나 프로세스가 접근하고 수정할 수 있는 데이터나 자원을 가리킵니다. 이러한 공유 자원은 동시에 여러 스레드나 프로세스가 접근할 수 있으므로 제대로 관리되지 않으면 예측할 수 없는 결과를 초래할 수 있습니다.
경쟁 상태의 개념
경쟁 상태는 여러 스레드나 프로세스가 공유 자원에 대해 동시에 접근하고 수정할 때 발생하는 문제입니다.
경쟁 상태가 발생하면 데이터의 일관성이 해치는 현상이 나타날 수 있습니다.
임계 영역의 개념
임계 영역은 다중 스레드 환경에서 공유 자원에 접근하는 부분으로, 동시에 여러 스레드가 접근해서는 안 되는 코드 영역을 가리킵니다.
경쟁 상태 예
- 스레드 A와 스레드 B가 동시에 공유 자원에 접근하고 수정하는 경우.
- 스레드 A가 공유 자원을 수정하는 도중에 스레드 B가 그 값을 읽는 경우.
경쟁 상태 해결 방법
- 동기화 : 공유 자원을 사용할 때, 다른 스레드가 해당 자원을 사용하지 못하도록 동기화를 해주어야 합니다.
- 락 : 공유 자원을 사용할 때, 다른 스레드가 해당 자원을 사용하지 못하도록 락을 걸어주어야 합니다.
- 세마포어 : 공유 자원을 사용할 때, 다른 스레드가 해당 자원을 사용할 수 있는 개수를 제한해주어야 합니다.
- 뮤텍스 : 공유 자원에 단 하나의 작업만이 접근할 수 있게 해준다.
- 모니터 : 공유 자원을 사용할 때, 다른 스레드가 해당 자원을 사용할 수 있는 인터페이스를 제공 합니다. 인터페이스가 호출되면 동기화를 합니다.
- 비동기 처리 : 공유 자원을 사용할 때, 다른 스레드가 해당 자원을 사용하지 않도록 비동기 처리를 해주어야 합니다.
'JAVA > 스레드' 카테고리의 다른 글
[JAVA] synchronized와 static synchronized의 차이점(block, method) (0) | 2023.09.25 |
---|---|
[JAVA] synchronized 키워드와 락(Lock) 개념 (0) | 2023.09.25 |
[JAVA] 스레드 우선순위 설정과 데몬 스레드 (0) | 2023.08.30 |
[JAVA] 스레드의 생성과 실행: Java로 구현하는 방법 (0) | 2023.08.30 |
[JAVA] Runnable 인터페이스와 Thread 클래스(sleep, join, interrupt) (0) | 2023.08.30 |