2016-07-19 5 views
0

작업자 스레드가 명령을 기다렸다가 수행 한 다음 호출자에게 결과를 다시 보내고 싶습니다. 이것은 응답으로 인해 일반 생산자/소비자 문제와 다릅니다. 두 가지 방법으로 생산자와 소비자가 의사 소통을 할 수 있습니까?

main 
{ 
construct workers 
push to shared input buffers 
notify workers 
wait 
print results from shared output buffer 
} 

worker 
{ 
wait 
read from shared input buffer 
do work 
notify main 
} 

이 궤도에 나는 건가요 :

이 내가 생각하고 무엇인가? 대기자가 대기 시작하기 전에 응답 할 수있는 기회가 있습니까?

당신이 올바른 궤도에

+2

조건이 충족 될 때까지 실행되는 스레드가 있습니다. 그런 다음 스레드 2에 알리고 실행을 중지합니다. 스레드 2는 깨우고 실행되며 조건을 충족하고 스레드 1에 알리고 중지합니다. 스레드 1이 깨어서 실행됩니다. 모든 작업이 직렬화됩니다. 스레딩의 필요성을 없애고 단일 스레드 상태 머신 (https://en.wikipedia.org/wiki/Finite-state_machine)을 사용하는 것이 좋습니다. – user4581301

+0

@ user4581301 제 계획은 여러 명의 근로자를 두어 병렬로 작업을 수행하는 것입니다. (나는 게시물을 업데이트했습니다) – Josh

+0

작업자는 다시 시작해야합니까, 아니면 필요한 경우 새 스레드를 만드시겠습니까? – user4581301

답변

2

(즉, 관련이 있다면 나는 C++를 사용하고 있습니다),하지만 당신은 일을 조금 단순화하고 신호 또는 신호

main 
{ 
    push to shared input buffers 
    construct workers // create and immediately run. No need for signal 
    while more workers 
     join worker // will block until worker thread exits 
    print results from shared output buffer 
} 

worker 
{ 
    read from shared input buffer 
    do work 
} 

기다릴 필요성을 제거 할 수 있습니다 공유 버퍼를 분할하는 방법 또는 분할하지 않는 방법에 따라 병행 쓰기에서 보호해야 할 수도 있습니다.

관련 문제