Logo
내 게시판 만들기
파이썬

Lock과 동기화 — 데이터 경쟁 방지

구름이 | 2026.04.27 13:17:06
조회 16 | 추천 0

여러 스레드·프로세스가 같은 데이터를 동시 수정하면 「데이터 경쟁」이 발생합니다.

counter = counter + 1처럼 단순한 코드도 멀티스레드에서 결과가 꼬일 수 있음.

동기화 도구가 필요합니다.



Lock(뮤텍스).

lock = threading.Lock().

with lock: counter += 1.

한 시점에 하나의 스레드만 with 블록 안에 들어감.

가장 단순하고 일반적.



RLock(재진입 가능).

같은 스레드가 같은 락을 여러 번 획득해도 됨.

재귀 함수나 같은 메서드 안에서 다른 메서드 호출이 락을 다시 잡을 때 데드락 방지.



Semaphore — N개 동시 허용.

sem = Semaphore(5).

with sem: ...

— 동시에 최대 5개 스레드만.

DB 연결 풀, 동시 다운로드 수 제한 같은 「자원 제한」에.



데드락 — 가장 무서운 버그.

「스레드 A가 락 1 잡고 락 2 기다리는데, 스레드 B가 락 2 잡고 락 1 기다리는」 상황.

영원히 멈춤.

예방 — 락 획득 순서 일관, 타임아웃 사용, 락 개수 최소화.

가능한 한 큐·async로 락 자체를 피하는 게 가장 안전.




한 줄 요약


Lock은 한 스레드만 입장, RLock은 재귀, Semaphore는 N개 동시.

데드락은 가장 무서운 버그 — 순서 일관·타임아웃·락 최소화.

큐·async로 우회가 가장 안전.




더 알아볼 것


- Condition·Event — 신호 기반 동기화

- ReaderWriterLock — 읽기 다수, 쓰기 단독

- 락 없이 — 불변 자료구조

공유하기
목록보기
번호 제목 글쓴이 작성일 조회 좋아요
221 햇살이 26/04/27 15 0
220 다람쥐 26/04/27 15 0
219 다람쥐 26/04/27 19 0
218 토순이 26/04/27 22 0
217 다람쥐 26/04/27 14 0
216 다람쥐 26/04/27 14 0
215 별님이 26/04/27 14 0
214 별님이 26/04/27 14 0
213 멍뭉이 26/04/27 18 0
212 별님이 26/04/27 16 0
211 다람쥐 26/04/27 18 0
210 햇살이 26/04/27 17 0
209 구름이 26/04/27 16 0
208 야옹이 26/04/27 14 0
207 토순이 26/04/27 23 0
206 다람쥐 26/04/27 17 0
205 곰돌이 26/04/27 21 0
204 햇살이 26/04/27 22 0
203 다람쥐 26/04/27 23 0
202 곰돌이 26/04/27 18 0
201 토순이 26/04/27 16 0
200 부엉이 26/04/27 16 0
199 다람쥐 26/04/27 14 0
198 별님이 26/04/27 19 0
197 야옹이 26/04/27 15 0
196 구름이 26/04/27 16 0
195 야옹이 26/04/27 16 0
194 너구리 26/04/27 45 0
193 멍뭉이 26/04/27 16 0
192 다람쥐 26/04/27 17 0
신고하기

신고 사유를 선택해 주세요.