2010-12-08 7 views
1

스레드 풀을 사용하여 다중 스레드 병합 정렬을 작성하고 따라서 부스트 라이브러리를 다운로드하고 싶습니다. 나는 C++에 초보자이며 소스 코드 예제 프로그램을 어떻게 실행하는지 이해하는데 어려움이있다. 여기에서 내가 downlaoded ..에서 소스입니다 http://threadpool.sourceforge.net/ .... 그것은 다운로드 섹션에 있습니다 ... 어떤 도움을 주시면 감사하겠습니다.스레드 풀을 사용하여 부스트 라이브러리

+0

무엇이 문제입니까? – ronag

+2

병합 정렬의 스레드 된 버전은 여전히 ​​표준 라이브러리에 포함 된 정렬보다 느릴 수 있습니다 (해당 정렬이 스레드되지는 않지만). 게다가 정렬은 이미 1 분 안에 수십억 개의 정수를 처리 할 수 ​​있습니다 ... 스레딩은 정렬 알고리즘보다 높은 수준에서 수행하는 것이 좋습니다. (그러나 시도해도 좋습니다.)) –

답변

0

OpenMP는 자체 관리 스레드의 요구 사항에 더 나은 선택입니다. this overview에 포함 된 병합 정렬 예가 있습니다.

1

필자는 특정 스레드 풀 라이브러리 (b.t.w.는 Boost의 일부가 아닙니다)에 익숙하지 않지만 스레드 풀의 일반적인 개념은 매우 간단합니다. 클래스는 enqueue(std::function<void()> fn); 인터페이스와 같아야하며 원하는 함수 객체를 얻기 위해 함수를 래핑하는 것이 필요합니다. 일반적으로 std::bind 또는 람다 함수로 수행됩니다. 스레드 풀은 실행 가능한 스레드가있을 때까지 함수 객체를 대기열에 보관합니다. 그 시점에서 단순히 fn()을 호출합니다. 병렬 정렬과 관련하여 병렬 처리를 위해 매우 잘 맞는 퀵 소트 버전을 작성할 수 있습니다. http://en.wikipedia.org/wiki/Quicksort

P.S. std::function, 대응 std::bind, 람다 함수는 C++ 0x의 일부이므로 Boost에서도 대용 물을 찾을 수 있습니다.

2

스레드를 관리하는 또 다른 도구는 TBB Intel Thread Building Blocks입니다. 이미 병합 정렬 구현이 있습니다. "tbb/parallel_sort.hpp" (그러나이 구현은 스레드 수에 관계없이 최소 O (n) 시간이 필요하므로 매우 효율적이지는 않습니다.)

관련 문제