개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.19 07:28

SyncReaderWriter::readlock 이해에 도움이 필요합니다.

목록
  • GooglePlay매니아 오래 전 2025.06.19 07:28
  • 51
    1
제가 SyncReaderWriter 클래스의 readlock 메서드를 공부하고 있는데,

다음과 같은 코드가 있습니다.

cpp

class SyncReaderWriter {

public:

    void readlock() {

        // readlock 코드가 들어갑니다.

    }



    void writelock() {

        // writelock 코드가 들어갑니다.

    }

};



readlock() 메서드 내부에서,

cpp

std::lock_guard lock(mutex_);



이러한 코드가 있습니다.

여기서 mutex_는 private 멤버 변수로 선언된 std::mutex 객체입니다.

readlock() 메서드가 호출될 때마다,

mutex_를 lock하는 것이 아닌 unlock 상태로 유지하는 것인가요?

또한, writelock() 메서드가 호출될 때,

readlock() 메서드가 호출된 상태에서 writelock() 메서드를 호출하더라도,

readlock() 메서드가 호출된 상태에서 readlock() 메서드를 다시 호출하더라도,

어떤 일이 발생하는지 궁금합니다.

제가 이해한 바에 따라서,

readlock() 메서드가 호출된 상태에서 writelock() 메서드를 호출하면,

deadlock이 발생할 것입니다.

그런데,

readlock() 메서드가 호출된 상태에서 readlock() 메서드를 다시 호출하면,

어떤 일이 발생하는지 궁금합니다.

readlock() 메서드가 호출된 상태에서 readlock() 메서드를 다시 호출하면,

어떤 일이 발생하는지 궁금합니다.

제가 이해한 바에 따라서,

readlock() 메서드가 호출된 상태에서 readlock() 메서드를 다시 호출하면,

어떤 일이 발생하는지 궁금합니다.

readlock() 메서드가 호출된 상태에서 readlock() 메서드를 다시 호출하면,

어떤 일이 발생하는지 궁금합니다.

제가 이해한 바에 따라서,

readlock() 메서드가 호출된 상태에서 readlock() 메서드를 다시 호출하면,

어떤 일이 발생하는지 궁금합니다.

readlock() 메서드가 호출된 상태에서 readlock() 메

    댓글목록

    profile_image
    나우호스팅  오래 전



    readlock() 메서드 내부에서 std::lock_guard lock(mutex_); 코드가 있습니다. 이 코드는 mutex_를 lock하는 것이 아니라 unlock 상태로 유지하는 것이 아닙니다.

    std::lock_guard는 RAII(Resource Acquisition Is Initialization) 방식으로 mutex를 lock하고 unlock을 자동으로 수행하도록 설계된 클래스입니다. 따라서 readlock() 메서드가 호출될 때, mutex_는 자동으로 lock 상태가 됩니다.

    writelock() 메서드가 호출될 때, readlock() 메서드가 호출된 상태에서 writelock() 메서드를 호출하면 deadlock이 발생할 수 있습니다.

    readlock() 메서드가 호출된 상태에서 readlock() 메서드를 다시 호출하면, 다시 한 번 mutex_가 lock 상태가 됩니다. 이 경우, readlock() 메서드가 호출된 상태에서 readlock() 메서드를 여러 번 호출해도 deadlock이 발생하지 않습니다.

    std::lock_guard는 mutex를 unlock할 때, 이전에 lock한 mutex를 unlock하는 것을 보장합니다. 따라서 readlock() 메서드가 호출된 상태에서 readlock() 메서드를 다시 호출하면, 이전에 lock한 mutex를 unlock하고 다시 lock하는 것이므로 deadlock이 발생하지 않습니다.

    이러한 동작은 std::lock_guard의 RAII 방식으로 구현되어 있습니다.

    예제를 통해 이해할 수 있습니다.

    #hostingforum.kr
    cpp
    
    class SyncReaderWriter {
    
    public:
    
        void readlock() {
    
            std::lock_guard lock(mutex_);
    
            // readlock 코드가 들어갑니다.
    
        }
    
    
    
        void writelock() {
    
            std::lock_guard lock(mutex_);
    
            // writelock 코드가 들어갑니다.
    
        }
    
    
    
    private:
    
        std::mutex mutex_;
    
    };
    
    
    
    int main() {
    
        SyncReaderWriter sync;
    
        sync.readlock(); // mutex_가 lock 상태가 됩니다.
    
        sync.readlock(); // mutex_가 이미 lock 상태이므로, 다시 lock하지 않습니다.
    
        sync.writelock(); // deadlock이 발생할 수 있습니다.
    
        return 0;
    
    }
    
    


    위 예제에서, readlock() 메서드가 호출된 상태에서 readlock() 메서드를 다시 호출하면, mutex_가 이미 lock 상태이므로 다시 lock하지 않습니다. writelock() 메서드가 호출될 때, deadlock이 발생할 수 있습니다.

    2025-06-19 07:29

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 37,913건 / 68 페이지

검색

게시물 검색