2014-11-19 2 views
5

스레드 풀은 t1, t2, t3 및 t4의 4 개의 스레드로 구성됩니다. 이들은 동시에 실행되지만 t3 및 t4의 입력은 t2의 출력에 따라 다릅니다. t2가 완료된 후 처리를 위해 출력 데이터를 t3 및 t4로 보내도록 메시지 큐를 구현하는 방법은 무엇입니까? 잠금 메커니즘을 사용하여 메시지 대기열을 구현하려했지만 잠금이 꽤 비싸다고 생각됩니다. 스레드간에 데이터를 전달하는 잠금없는 메커니즘이 있습니까? visual studio 2010에서 boost :: thread를 사용 중입니다.C++ - 스레드간에 데이터 전달

+1

는 다음 링크에서 알아보기 : http://stackoverflow.com/questions/20595760/c-communication-between-threads –

답변

3

부스트에 잠금 해제 대기열 : http://www.boost.org/doc/libs/1_56_0/doc/html/lockfree.html이 있습니다.

+0

안녕 토모, 대한 내 경우 t3과 t4 모두 t2에서 출력 데이터를 가져와야합니다. 그래서 누가 메시지 대기열에서 데이터를 대기열에서 제외 시킬지 궁금합니다. t2 나되어야 t3이나 t4가 먼저 완료 될지 확실하지 않습니다. 나는 t2가 새로운 데이터를 enqueue 할 때마다 dequeue를 수행한다는 것을 의미한다. – Bent

+0

예, t2는 출력을 대기열에 넣어야합니다. T3 및 t4는 대기열에 처리 할 것이 있는지 주기적으로 확인해야합니다. t3와 t4에는 할 일이 있다고 가정합니다. 그렇지 않은 경우 (즉, t2의 출력을 기다리고 처리하는 작업 만) 잠금이없는 대기열은 잊어 버리고 잠금 솔루션으로 이동하십시오. 스레드가 어쨌든 대기해야하는 경우 잠금 비용이 걱정되지 않아야합니다. – Tomo

1

으로 간주 할 수 있습니다. concurrent_queue, concurrent_bounded_queue (대기 중), pipeline, flow::graph을 포함한 광범위한 병렬 개념을 제공합니다. 처음 두가 MS VS 내 에서도 사용할 수 있습니다 2010 년

+0

안녕 안톤, 답장을 보내 주셔서 감사합니다! 왜냐하면 내 프로젝트는 현재 부스트 라이브러리를 사용하기 때문에 부스트에 더 집중할 것이다. 그러나 어떤 해결책도 찾을 수 없다면 TBB도 살펴볼 것입니다. :)) – Bent

관련 문제