2011-08-07 37 views
1

我想弄清楚如何對齊線程池中的任務。 我有4個(並行)線程,並且在每個線程執行步驟的開始處有10個任務。我的第一個嘗試是測量每個任務的時間,並根據這個時間找到線程中任務的最佳組合,以獲得最佳結果。我試圖寫一篇基於這篇文章的並行遊戲引擎http://software.intel.com/en-us/articles/designing-the-framework-of-a-parallel-game-engine/線程池理解問題

問題是我的'解決方案'不起作用。有沒有更多的方法來調整任務?

(該項目是在C++)

+0

什麼語言是在這之後?如果是Java,則可以使用JDK 7中新的[Phaser](http://download.oracle.com/javase/7/docs/api/java/util/concurrent/Phaser.html)類來保持線程同步。 – aroth

+0

使用現有的框架(如TBB或PPL)來管理該框架會容易得多。 – Puppy

+0

它會,但我想知道它是如何完成的。 – LazyBones

回答

0

你應該看看這兩種煙(其多線程處理技術演示引擎)和nullstien從英特爾視覺計算的網站,他們都解決線程池的任務(nullstien有兩個變量,一個基於tbb的調度程序和定製的調度程序)

1

要在並行線程中對齊任務,請使用信號量,事件,互斥鎖。 不要測量任務需要的時間。線程最多是隨機執行的。 如果您在並行線程中執行4個任務,則前2個可能在第二個2開始之前完成。 下面是如何正確地做到這一點

void Thread1() 
{ 
    task1(); 
    semaphore1.Release() 
} 

void Thread2() 
{ 
    task2(); 
    semaphore1.WaitOne(); 
    task3(); 
} 

這樣,TASK3將始終執行任務1完成