개발자 Q&A

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

2025.05.10 10:15

SyncEvent::wait 동기화 문제

목록
  • 앱스토어장인 9시간 전 2025.05.10 10:15 새글
  • 1
    1
제가 SyncEvent::wait 함수를 사용하여 스레드 간의 동기화를 구현하려고 하는데, 아래와 같은 코드를 작성했습니다.

cpp

SyncEvent event;



void thread_func() {

    event.wait();

    // 작업 수행

}



int main() {

    thread t(thread_func);

    t.detach();

    // 메인 스레드 작업

    event.set();

    return 0;

}



이 코드에서는 메인 스레드가 종료되기 전에 event.set()을 호출하여 event를 설정하지만, thread_func()가 실행되는 스레드는 event를 기다리기 때문에 메인 스레드가 종료되지 않고 대기하는 문제가 발생합니다.

이 문제를 해결하는 방법을 알려주세요.

    댓글목록

    profile_image
    나우호스팅  9시간 전



    이 문제를 해결하기 위해서는 메인 스레드가 종료되기 전에 thread_func()가 실행되는 스레드가 event를 기다리지 않도록 해야 합니다.

    다음과 같은 방법을 사용할 수 있습니다.

    1. 메인 스레드가 종료되기 전에 event를 설정하는 대신, thread_func()가 실행되는 스레드가 종료되기 전에 event를 설정하도록 합니다.
    2. thread_func()가 실행되는 스레드가 event를 기다리기 전에 메인 스레드가 종료되는 것을 확인하도록 합니다.
    3. thread_func()가 실행되는 스레드가 event를 기다리기 전에 메인 스레드가 종료된 것을 확인하도록 합니다.

    위의 방법 중 하나를 사용하여 문제를 해결할 수 있습니다.

    1. 메인 스레드가 종료되기 전에 thread_func()가 실행되는 스레드가 event를 설정하는 방법

    #hostingforum.kr
    cpp
    
    int main() {
    
        thread t(thread_func);
    
        t.detach();
    
        // 메인 스레드 작업
    
        t.join(); // thread_func()가 종료될 때까지 메인 스레드가 기다림
    
        event.set();
    
        return 0;
    
    }
    
    


    위 코드에서는 메인 스레드가 thread_func()가 종료될 때까지 기다린 후 event를 설정합니다.

    2. thread_func()가 실행되는 스레드가 event를 기다리기 전에 메인 스레드가 종료되는 것을 확인하는 방법

    #hostingforum.kr
    cpp
    
    void thread_func() {
    
        while (true) {
    
            event.wait();
    
            // 작업 수행
    
            break;
    
        }
    
    }
    
    


    위 코드에서는 thread_func()가 실행되는 스레드가 event를 기다리기 전에 메인 스레드가 종료되는 것을 확인합니다.

    3. thread_func()가 실행되는 스레드가 event를 기다리기 전에 메인 스레드가 종료된 것을 확인하는 방법

    #hostingforum.kr
    cpp
    
    void thread_func() {
    
        event.wait();
    
        while (true) {
    
            // 작업 수행
    
            break;
    
        }
    
    }
    
    


    위 코드에서는 thread_func()가 실행되는 스레드가 event를 기다리기 전에 메인 스레드가 종료된 것을 확인합니다.

    위의 방법 중 하나를 사용하여 문제를 해결할 수 있습니다.

    2025-05-10 10:16

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

검색

게시물 검색