개발자 Q&A

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

2025.03.08 19:51

parallelSync::set 관련 질문

목록
  • 디자인패턴마스터 14일 전 2025.03.08 19:51
  • 12
    1
저는 parallelSync::set 함수를 사용하여 동기화 변수를 설정하려고 하는데, 설정한 변수가 다른 스레드에서 읽히는 것을 방지하는 방법을 모르겠습니다.

parallelSync::set 함수는 동기화 변수를 설정할 때, 다른 스레드에서 읽기 연산이 발생하는 것을 방지하는 기능을 제공하나요?

만약 그렇다면, 이 기능을 사용하는 방법을 알려주세요.

또한, 다른 스레드에서 동기화 변수를 읽는 것을 방지하는 다른 방법도 알려주세요.

감사합니다.

    댓글목록

    profile_image
    나우호스팅  14일 전



    parallelSync::set 함수는 동기화 변수를 설정할 때, 다른 스레드에서 읽기 연산이 발생하는 것을 방지하는 기능을 제공하지 않습니다.

    이러한 기능을 제공하는 방법은 여러 가지가 있습니다.

    1. mutex lock 사용: 동기화 변수를 설정하기 전에 mutex lock을 사용하여 스레드의 접근을 차단합니다. 이후 설정이 완료되면 mutex lock을 해제합니다.

    #hostingforum.kr
    cpp
    
    std::mutex mtx;
    
    std::shared_ptr data = std::make_shared();
    
    
    
    void thread_func() {
    
        std::lock_guard lock(mtx);
    
        // 동기화 변수 설정
    
    }
    
    
    
    void main_func() {
    
        // 동기화 변수 설정
    
        std::lock_guard lock(mtx);
    
        data->set(10);
    
    }
    
    


    2. atomic 변수 사용: atomic 변수는 스레드-safe 하므로, 동기화 변수를 설정할 때 atomic 변수를 사용하여 스레드의 접근을 차단할 필요가 없습니다.

    #hostingforum.kr
    cpp
    
    std::atomic data(0);
    
    
    
    void thread_func() {
    
        // 동기화 변수 설정
    
        data.set(10);
    
    }
    
    
    
    void main_func() {
    
        // 동기화 변수 설정
    
        data.set(10);
    
    }
    
    


    3. std::condition_variable 사용: 동기화 변수를 설정할 때, 다른 스레드에서 읽기 연산이 발생하는 것을 방지하기 위해 std::condition_variable을 사용할 수 있습니다.

    #hostingforum.kr
    cpp
    
    std::mutex mtx;
    
    std::condition_variable cv;
    
    std::shared_ptr data = std::make_shared();
    
    
    
    void thread_func() {
    
        std::unique_lock lock(mtx);
    
        cv.wait(lock, []{ return data->get() != 0; });
    
        // 동기화 변수 설정
    
    }
    
    
    
    void main_func() {
    
        // 동기화 변수 설정
    
        std::lock_guard lock(mtx);
    
        data->set(10);
    
        cv.notify_one();
    
    }
    
    


    위의 예제는 동기화 변수를 설정할 때, 다른 스레드에서 읽기 연산이 발생하는 것을 방지하는 방법을 보여줍니다.

    2025-03-08 19:52

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

검색

게시물 검색