2011-01-26 64 views
0

我是新手在C + +和提升。將變量傳遞到線程後,它已經開始

作爲我的碩士論文的一部分,我編寫了一個模擬統計模型的程序。在計算過程中,我使用boost :: thread來處理我的「質心矢量中心」,以節省一些計算時間。到現在爲止還挺好。

現在,我想從boost :: thread(每次一個元素)獲取每個結果,並將它傳遞給一個正在運行的線程,這將執行遞歸回歸。

我的問題:

  • 如何將我的新的計算元素傳遞給現有的線程?
  • 當我通過新的元素時,我怎麼能「喚醒」線程?

如果有人能指點我一個現有的例子,我會很高興。

回答

2

最簡單的方式是使用std::queueboost::mutexboost::conditional_variable。在推送到隊列調用conditional_variable.notify_one()之後,通過互斥將所有對隊列的訪問包裝起來。在消費者線程中等待conditional_variable,直到任何結果準備好,然後處理它。

0

從另一個線程控制線程的經過驗證的方法是通過隊列和條件變量的組合來發送消息。不幸的是,boost :: thread並沒有提供標準的解決方案,實現時有兩個棘手的問題(可能的死鎖,隊列滿時的行爲,使用多態消息......)

0

您應該使用mutex和/ ro semaphore同步您的線程和鎖定變量以實現線程安全通信。請注意,您的進程中的所有threads共享相同的內存,因此您可以訪問相同的數據,但您必須以線程安全的方式執行此操作。

我不知道如果boost庫實現任何線程原語,但這裏是關於多線程編程使用POSIX線程一個很好的教程 - http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html