- 공부한 날짜: 2021.12.01
- Multithreading- Thread - Lock, DeadLock
- Keyword: Lock, DeadLock, Race Condition, Thread synchronizatin
Part 01
- 용어 설명
1. 세마포어(Semaphore): 프로세스간 공유된 자원에 접근 시 문제 발생 가능성 -> 한 개의 프로세스만 접근 처리 고안(경쟁 상태 예방)
2. 뮤텍스(Mutex): 공유된 자원의 데이터를 여러 스레드가 접근하는 것을 막는 것 -> 경쟁 상태 예방
3. Lock : 상호 배제를 위한 잠금(Lock) 처리 -> 데이터 경쟁 (추가로 찾아보기)
4. DeadLock: 프로세스가 자원을 획득하지 못해 다음 처리를 못하는 무한 대기상황(교착상태)
5. Thread synchronization(스레드 동기화)를 통해서 안정적으로 동작하게 처리한다. (동기화 메소드, 동기화 블럭)
- Semaphore vs Mutex
1. 세마포어와 뮤텍스 개체는 모두 병렬 프로그래밍 환경에서 상호배제를 위해 사용한다
2. 뮤텍스 개체는 단일 스레드가 리소스 또는 중요 섹션 소비를 허용
3. 세마포어는 리소스에 대한 제한된 수의 동시 액세스를 허용
4. 세마포어는 여러 프로세스일때 사용되는 걸로 생각하면 됨. 세마포어가 단일작업일 경우 뮤텍스와 원리가 동일하다
- 라이브러리 import
- FakeDataStore class 구현
- 메인 함수 구현
이렇게 했을 때 문제점, 총 실행 횟수는 3번인데 스레드들이 자원에 동시에 접근하기 때문에 정확한 결과를 출력하지 않음
-> Lock을 이용함으로써 문제를 해결할 수 있다.
Part 02
- Lock 이용해서 구현
- 방법 #1: self._lock.acquire() , self._lock.release()로 구현
- 방법 #2 : with self._lock으로 구현
- 메인 함수
-> 위와 같은 방법으로 구현하면 오류없이 3을 출력함을 확인할 수 있다. 스레드 접근에 Lock을 걸어서 정확하게 처리하는 법 익히기.
'Dev Language > Python' 카테고리의 다른 글
[파이썬_4] #6. Multiprocessing - Join, is_alive (0) | 2021.12.07 |
---|---|
[파이썬_4]#5. Process vs Thread and Parallelism (0) | 2021.12.07 |
[파이썬_4] #3. ThreadPoolExecutor (0) | 2021.12.02 |
[파이썬_4] #2. Multithreading/ Daemon Thread (0) | 2021.12.02 |
[파이썬_4] #1. 프로세스(process) vs 스레드(thread) and GIL(Global Interpreter Lock) (0) | 2021.12.02 |