2012-04-14 47 views
0

我有一個算法可以在多個設備之間調度子任務來解決main_task。它將內核排入所有命令隊列,並通過回調附加一個事件。 在這個回調函數中,我檢查我的main_task是否完成,如果沒有,我排隊一個子任務。否則,我將共享變量is_main_task_done設置爲true以通知其他命令隊列它們應該停止排列子任務。等到命令隊列完成所有入隊作業

同時,我必須以某種方式防止主機的主線程退出,直到is_main_task_done設置爲true。是否有跨平臺解決方案?到目前爲止,我在AMD的指南中發現只有螺旋鎖解決方案:

while (!is_main_task_done) 
sleep(0) 

但它似乎只在Windows中工作。

+0

如果你的任務沒有完成,你設置了is_task_done = true。這沒有意義。 – j13r 2012-04-14 14:52:01

+0

對不起。我更新了術語。基本上它是一種在不同線程上具有不同範圍的for-loop。 – Kentzo 2012-04-14 16:04:27

回答

1

這裏使用信號量是個好主意。使用您希望運行的任務數量初始化信號量,並確保僅運行此數字。

+0

工作完成前,任務數量未知。 – Kentzo 2012-04-14 15:59:25

+0

我的意思是並行任務的數量(可能一次只有1個)。 – j13r 2012-04-14 16:03:45

+0

這與螺旋鎖有什麼不同? – Kentzo 2012-04-14 16:07:50