2012-04-14 11 views
0

main_taskを解決するために複数のデバイス間でサブタスクをスケジュールするアルゴリズムがあります。カーネルをすべてのコマンドキューにエンキューし、イベントをコールバックとともにアタッチします。 このコールバックでは、main_taskが完了しているかどうかをチェックし、main_taskが終了していない場合は、もう1つのサブタスクをエンキューします。それ以外の場合は、共用変数is_main_task_donetrueに設定して、他のコマンド・キューにサブタスクのエンキューを停止する必要があることを通知します。コマンドキューがエンキューされたすべてのジョブを完了するまで待ちます

一方、is_main_task_donetrueに設定されるまで、ホストのメインスレッドが終了するのを防ぐ必要があります。クロスプラットフォームソリューションはありますか?私は今までAMDのガイドにスピンロックソリューションしか見つけていませんでした。

while (!is_main_task_done) 
sleep(0) 

しかし、Windowsでのみ動作するようです。

+0

タスクが完了していない場合は、is_task_done = trueを設定します。それは意味をなさない。 – j13r

+0

申し訳ありません。私は用語を更新しました。基本的には、さまざまなスレッドで異なる範囲のfor-loopの一種です。 – Kentzo

答えて

1

ここでセマフォを使用することをお勧めします。実行したいタスクの数でセマフォを初期化すると、この番号だけが確実に実行されます。

+0

ジョブが完了するまで、タスクの数は不明です。 – Kentzo

+0

私は並列タスクの数を意味していました(おそらく一度に1つだけです)。 – j13r

+0

これはスピンロックとどのように違いますか? – Kentzo

関連する問題