스레드 동기화(Thread Synchronization)
스레드 동기화는 멀티스레드 환경에서 여러 스레드가 공유 자원(예: 변수, 객체, 파일 등)에 동시에 접근할 때 발생할 수 있는 문제를 방지하기 위해 사용됩니다. 동기화를 통해 한 번에 하나의 스레드만 공유 자원에 접근할 수 있도록 제어할 수 있습니다. 이렇게 하지 않으면 데이터 불일치, 데이터 손상 등의 문제가 발생할 수 있습니다.
락(Lock)의 개념
**락(Lock)**은 스레드 동기화의 핵심 개념 중 하나로, 공유 자원에 대한 접근을 제어하는 메커니즘입니다. 락을 사용하면 한 스레드가 자원을 사용하는 동안 다른 스레드가 그 자원에 접근하지 못하도록 막을 수 있습니다.
락의 동작 원리
- 락 획득(Take a Lock): 스레드가 공유 자원에 접근하기 전에 락을 획득합니다. 이때 다른 스레드들은 자원에 접근할 수 없습니다.
- 자원 사용: 락을 획득한 스레드는 자원을 안전하게 사용할 수 있습니다.
- 락 해제(Release a Lock): 자원을 다 사용한 후, 스레드는 락을 해제합니다. 그러면 대기 중인 다른 스레드가 락을 획득하고 자원을 사용할 수 있습니다.
락의 종류
- 뮤텍스(Mutex, Mutual Exclusion):
- 단일 스레드가 자원을 독점적으로 사용하기 위해 사용됩니다. 한 번에 하나의 스레드만 락을 획득할 수 있습니다.
- 세마포어(Semaphore):
- 정해진 수의 스레드가 자원에 접근할 수 있도록 허용합니다. 예를 들어, 세마포어 값이 3이면 최대 3개의 스레드가 동시에 자원에 접근할 수 있습니다.
- 리드/라이트 락(Read/Write Lock):
- 읽기 작업은 여러 스레드가 동시에 수행할 수 있지만, 쓰기 작업은 오직 하나의 스레드만 수행할 수 있도록 제어합니다. 이는 읽기-쓰기가 많은 시스템에서 유용합니다.