공부하다가 막히는 부분이 있어서 질문 드려요. 뮤텍스(mutex, 상호배제 락)랑 세마포어(semaphore, 신호 카운터) 둘 다 동시성 제어할 때 쓴다는 건 알겠는데, 솔직히 뭐가 다른지 감이 안 잡히네요. 그냥 둘 다 자원 잠그는 거 아닌가 싶고요.


예전에 쓰레드 여러 개가 같은 카운터 값을 건드리는 코드 짜다가 값이 이상하게 나와서, 검색해보니 락을 걸라길래 이런 식으로 했거든요.


lock.acquire()
counter += 1
lock.release()


이건 뮤텍스 개념인 것 같은데, 그럼 세마포어는 언제 필요한 건가요? 카운트를 1로 준 세마포어랑 뮤텍스는 사실상 같은 건지도 궁금하고요. 실무에서 "이럴 땐 뮤텍스, 저럴 땐 세마포어" 하는 감이 있으면 예시로 좀 알려주시면 정말 감사하겠습니다. 아직 이 부분은 잘 몰라서요.