2013-01-09 9 views
0

(조건 변수와 장벽의 사용을 결합)가 필요합니다 , 나중 단계의 스레드는 현재 단계의 모든 스레드가 완료 될 때까지 기다려야합니다.은 pthread와 동기화에 대한 조언/제안 나는 다음과 같은 시나리오 한

:

스레드 1, 2, 3은 6 개의

단계 끈 (7), (8) 작업을하고, 스텝 하나

실 (4, 5)을 작업을 수행하고, 9 세 번째 단계 수행 중 ...

각 단계의 스레드는 독립적이지만 이전 단계의 스레드가 완료 될 때까지 기다려야합니다. 현재 단계는

  • 시작할 수 있습니다 경우 현재 단계를 시작할 수하면 있음을 나타내는 상태에서 대기, 현재 단계의 각 스레드에서

    1. : 여기

      내가 이것을 달성하는 방법입니다 모든 스레드가 작업을 시작하고이 단계의 모든 스레드가 완료 될 수 있도록 장벽을 기다립니다.

    2. 이 단계의 모든 스레드가 완료되면 다음 단계 스레드가 대기중인 조건 변수에서 브로드 캐스트합니다.

    그게 맞습니까? 여기서 분명히 잘못된 것이 있습니까?

    필자는 멀티 스레딩 프로그램을위한 고급 언어 구조를 사용하고 있으며 pthread API를 사용하는 것은 나에게 고통 스럽습니다. 여기,이 유스 케이스의 모범 사례에 대한 조언이 필요합니까? 많은 감사

  • +0

    당신의 전략이 충분히 잘 보이는 것이된다. 시나리오에서 병렬 처리 접근법은 (1) "파이프 라인"작업이고 (2) (1)의 조건 변수와 (2)의 장벽을 사용하는 각 "분기 결합"단계입니다. – yohjp

    +0

    @yohjp 귀하의 의견을 보내 주셔서 감사합니다. 위의 방법을 적용하여 작업 솔루션을 이미 구현했습니다. :) – chuchao333

    답변

    0

    이 질문에 관심있는 사람들에게. 이미 작업 솔루션을 구현했습니다. I는 yohjp은 주석으로 이것이 전형적인 병렬/동시 문제한다고 생각 : I가 [num_stage] P 스레드 장벽의 배열 및 [num_stage + 1] (pthread_cond_t,들은 pthread_mutex_t) 쌍 배열을 사용한

    1 "Pipelined" tasks 
    2 "Join" on each of the stage 
    

    . 메인 스레드에서 하나의 조건부 변수를 사용하여 시작합니다.

    누구든지 샘플 코드를 원하면 과제물 하나에 포함되어 있기 때문에 전자 메일을 통해 문의하십시오. github에 코드를 게시 할 수 없습니다.

    원시의 pthread API를 사용하여 내 최초의 비 시험 멀티 스레드 프로그램은 매우 즐거운 경험 :