2013-08-23 3 views
0

boost::thread 클래스를 사용하여 스레드 풀을 구현하고 싶습니다.스레드 풀 부스트 :: 스레드 클래스를 사용하여 구현

아래 줄을 사용하여 스레드를 만들 수 있습니다.

boost::thread Consumer_1(consume); 

여기서 consumer_1은 스레드이며, 소비되는 것은 함수이다.

위의 명령문은 실행되는 즉시 스레드를 시작합니다.

이제 스레드를 만들고 바인딩 런타임을 수행하려고합니다.

아직까지이 바인딩을 지연하는 방법이 boost은 아닙니다.

아무도 도와 드릴 수 있습니까?

답변

1

바인딩 나중에 할 수 없습니다. 주된 이유로 — 실행 스레드가 뭔가를 실행해야합니다.

수행해야 할 작업은 대기열에서 boost::function으로 표시된 작업을 취하여 실행하는 함수를 만드는 것입니다. 하나 이상의 스레드에서이 함수를 실행하십시오.

스레드 안전 대기열이 있는지 확실하지 않지만 스레드를 깨우는 데 std::deque을 사용하고 boost::condition_variable을 사용하여 큐를 잠그는 데 boost::mutex을 사용할 수 있습니다.

Boost.Asio도 볼 수 있습니다. here도 참조하십시오.

+1

+1 Asio를 제안했습니다. 프로덕션 코드에서 자신의 스레드 풀을 사용하고 싶지는 않을 것입니다. 윌리엄스의 'C++ 동시성 (Concurrency in Action)'책에서이 주제에 대한 전체 장을 읽고, 잘못 할 수있는 많은 것들을 토론하십시오. – ComicSansMS