티스토리 뷰

좋은 질문입니다. 세마포어는 동시에 여러 스레드가 자원에 접근할 수 있게 허용하는 동기화 도구이기는 하지만, 그 자체로는 데이터의 일관성을 보장해주지 않습니다. 세마포어는 단순히 동시 접근 가능한 스레드의 수를 제한합니다.

세마포어가 동시에 여러 스레드에 자원 접근을 허용하는 경우는 아래와 같은 상황에서 유용합니다:

  1. 제한된 자원을 가진 상황:
    예를 들어, 데이터베이스 연결 풀에서 동시에 사용할 수 있는 연결 수를 제한하고 싶을 때 세마포어를 사용할 수 있습니다. 연결 풀의 크기가 10이면, 세마포어의 허용 수도 10으로 설정되며, 10개를 초과하는 스레드는 연결이 반환될 때까지 기다려야 합니다.

  2. Rate Limiting:
    동시에 너무 많은 요청이 서비스에 도달하지 않도록 요청의 수를 제한하고 싶을 때 사용됩니다.

  3. 공유 자원의 동시 접근 제한:
    예를 들어, 프린터와 같은 공유 자원을 동시에 3명의 사용자만이 사용할 수 있도록 제한하고 싶을 때 사용됩니다.

그렇다면, 세마포어로 여러 스레드가 동시에 공유 자원에 접근하도록 허용했을 때, 어떻게 데이터 일관성 문제를 방지할 수 있을까요?

답은 간단합니다. 그런 유형의 공유 자원은 '동시에 여러 스레드에 의한 접근'에 안전한, 즉 'thread-safe'해야 합니다. 예를 들면, thread-safe한 큐 또는 컬렉션이 될 수 있습니다. 이런 경우에는 세마포어로 동시 접근을 허용해도 데이터 일관성 문제가 발생하지 않습니다.

그러나, thread-safe하지 않은 공유 자원에 접근할 때는 세마포어만으로는 충분하지 않습니다. 이런 경우에는 추가적인 동기화 메커니즘(예: 락)을 사용해야 합니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크