2014-05-19 4 views
0

나는 소비자가 큐에서 아이템을 얻는 스레드 큐를 만들고 프로듀서는 아이템을 큐에 넣는다. 생성 된 소비자 수는 사용자 입력 값입니다. 나는 두 가지 방법을 시도했다. 첫 번째 버전은 잘 작동하지만 두 번째 버전은 제대로 작동하지 않습니다. 사용자 입력 제약 때문에 첫 번째 버전을 사용할 수 없습니다. 사실 나는이 둘의 차이점을 얻지 못했습니다. 첫 번째 스레드가 동시에 세 개의 스레드를 만드는 반면 두 번째 스레드는 하나씩 만듭니다. 이것에 대한 단서가 있습니까?다중 소비자를 가진 쓰레드 큐

auto c1 = async(launch::async, consumer); 
auto c2 = async(launch::async, consumer); 
auto c3 = async(launch::async, consumer); 

for(int i = 1; i <= 3; i++) 
    auto c1 = async(launch::async, consumer); 

답변

1

둘 다 같은 방식으로 두 가지가 서로 비동기 작업을 차례로 시작하기 때문에 둘 다 동일합니다.

둘 다 어떤 식 으로든 루프와 달리 변수 c1은 루프 내부의 수명에만 국한되며 루프 반복마다 범위를 벗어나서 소멸됩니다. 그리고 모든 차이를 만드는 것은 아마도 이것입니다 : 객체 c1이 파기 될 수 있기 때문에 파괴되기 전에 consumer 함수가 완료 될 때까지 기다려야합니다.

+0

좋은 설명. 그런 다음 두 번째 버전을 약간 변경하여 소비자 기능이 끝나기를 기다리지 않는 세 개의 스레드를 만들 수있는 방법이 있습니까? – user3081703

+0

@ user3081703 결과가 마음에 들지 않는다면 왜 ['std :: thread'] (http://en.cppreference.com/w/cpp/thread/thread)를 사용하지 않을까요? 그리고 그들을 벡터로 밀어 넣어서 파괴되지 않도록하십시오. 그리고 필요할 때 나중에 연결할 수 있습니다. –

관련 문제