2011-01-26 4 views
0

저는 C++과 boost에서 초보자입니다.변수를 이미 시작한 후에 스레드에 전달합니다.

저의 석사 학위 논문의 일부로 통계 모델을 시뮬레이트하는 프로그램을 작성했습니다. 계산하는 동안, 나는 boost :: thread를 사용하여 계산 시간을 절약하기 위해 "질량 중심"을 처리합니다. 여태까지는 그런대로 잘됐다.

이제 boost :: thread (매번 한 요소)에서 각 결과를 가져 와서 재귀 회귀를 수행 할 실행중인 스레드로 전달하고 싶습니다.

내 질문 :

  • 은 내가 어떻게 기존의 스레드에 나의 새로운 계산 요소를 전달할 수 있습니다
      ?
    • 새 요소를 전달할 때 어떻게 스레드를 "깨울 수 있습니까?"

    누군가 기존의 사례를 지적 해 주시면 기쁠 것입니다.

  • 답변

    2

    가장 간단한 방법은 std::queue, boost::mutexboost::conditional_variable을 사용하는 것입니다 - boost 라이브러리가 POSIX 스레드를 사용하여 프로그램을 멀티 스레딩에 대한 좋은 자습서를 어떤 스레딩 프리미티브를 구현하지만 여기 경우

    는 잘 모르겠어요. 대기열 호출 conditional_variable.notify_one()으로 푸시 한 후 뮤텍스별로 대기열에 대한 모든 액세스를 래핑합니다. 소비자 스레드에서 결과가 준비 될 때까지 conditional_variable을 기다린 다음 처리하십시오.

    0

    다른 스레드에서 스레드를 제어하는 ​​입증 된 방법은 대기열과 조건 변수의 조합을 통해 메시지를 보내는 것입니다. 불행하게도 boost :: thread는 표준 솔루션을 제공하지 않으며 구현할 때 몇 가지 까다로운 작업이 있습니다 (대기 상태가 가득 찼을 때의 동작, 다형성 메시지 사용 ...)

    0

    mutex 및/ro semaphore 스레드와 동기화 변수를 동기화하여 스레드 안전 통신을 구현하십시오. 프로세스의 모든 threads이 동일한 메모리를 공유하므로 동일한 데이터에 액세스 할 수 있지만 스레드로부터 안전한 방식으로 처리해야한다는 점에 유의하십시오. http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

    관련 문제