[sql] 락(락킹)과 세마포어(Semaphore)의 차이점은 무엇인가요?
락(락킹)과 세마포어(Semaphore)는 멀티스레드 프로그래밍에서 동시에 여러 스레드가 접근하는 공유 자원을 보호하기 위해 사용되는 동기화 기법입니다. 하지만 락과 세마포어는 목적과 동작 방식 등에 있어서 몇 가지 차이가 있습니다.
- 목적:
- 락(락킹): 공유 자원에 대한 동시 접근을 막고, 상호배제(Mutual Exclusion)를 이루어 안전한 접근을 보장합니다.
- 세마포어(Semaphore): 동시에 사용 가능한 자원의 수를 제어하고, 스레드 간의 순서를 조절하여 동기화를 달성합니다.
- 동작 방식:
- 락(락킹): 락은 뮤텍스(Mutex)와 스핀락(Spinlock) 등의 형태로 사용되며, 특정 조건을 만족할 때까지 대기하면서 동시에 접근하는 것을 막습니다.
- 세마포어(Semaphore): 카운터 변수를 통해 동시에 자원을 사용할 수 있는 스레드의 수를 관리하며, 카운터 값을 증가 또는 감소시킴으로써 스레드의 진입을 허용하거나 제한합니다.
- 사용 용도:
- 락(락킹): 주로 단일 자원에 대한 접근을 제어하는데 사용됩니다.
- 세마포어(Semaphore): 주로 자원의 개수에 따른 접근을 제어하거나 스레드 간의 특정한 순서를 유지하기 위해 사용됩니다.
이처럼, 락(락킹)과 세마포어(Semaphore)는 공유 자원을 보호하고 동기화를 달성하기 위한 방법으로 서로 다른 특징을 가지고 있습니다.
관련 참고 자료: