[파이썬] 크리티컬 섹션과 스레드 보호
크리티컬 섹션(Critical Section)은 여러 스레드가 동시에 접근하면 문제가 발생할 수 있는 부분을 말합니다. 예를 들어, 여러 스레드가 동시에 같은 변수를 수정하면 원하지 않는 결과가 발생할 수 있습니다. 크리티컬 섹션에서는 한 스레드만 접근할 수 있도록 보호해야 합니다.
파이썬에서는 threading
모듈을 사용하여 스레드를 생성하고 관리할 수 있습니다. 스레드 보호를 위해 Lock
객체를 사용할 수 있습니다. Lock
객체는 크리티컬 섹션에 한 번에 한 스레드만 접근할 수 있도록 제어합니다.
아래는 파이썬에서의 크리티컬 섹션과 스레드 보호 예제 코드입니다:
import threading
# 공유 변수
counter = 0
# Lock 객체 생성
lock = threading.Lock()
# 스레드 함수
def increment():
global counter
for _ in range(100000):
lock.acquire() # 크리티컬 섹션 진입
counter += 1
lock.release() # 크리티컬 섹션 빠져나감
# 스레드 생성
thread1 = threading.Thread(target=increment)
thread2 = threading.Thread(target=increment)
# 스레드 실행
thread1.start()
thread2.start()
# 모든 스레드 실행 완료 대기
thread1.join()
thread2.join()
# 결과 출력
print("Counter value:", counter)
위의 코드에서 increment
함수는 counter
변수를 10만번씩 증가시키는 작업을 수행합니다. lock.acquire()
로 크리티컬 섹션 진입을 시도하고, lock.release()
로 크리티컬 섹션 빠져나갑니다.
두 개의 스레드가 동시에 increment
함수를 실행하더라도 Lock
객체를 사용하여 한 번에 한 스레드만이 크리티컬 섹션에 접근할 수 있게 됩니다. 이를 통해 변수 counter
는 정확한 값을 유지할 수 있습니다.
이와 같은 방법으로 파이썬에서 크리티컬 섹션과 스레드 보호를 구현할 수 있습니다. 스레드 보호는 멀티스레드 환경에서 데이터에 동시 접근을 제어하여 예상치 못한 결과를 방지하는 중요한 개념입니다.