2011-10-20 9 views
2

私は1インスタンスで始まり、5fpsに達するまで成長するおもちゃアプリを書きたいと思っています。インスタンスには実行するには<を1msとするrun()メソッドがあります。だから実際のスレッドの代わりに私はタスクを取って実行するために、シリアルディスパッチキューを使用したいと思います。私はマルチコアマシンを持っていて、もし私がそれを避けることができたら、ロックしたくないです。私はシリアルディスパッチキューを書いていませんが、C++(0x?)標準のシリアルディスパッチキューを使用できますか?C++で標準のシリアルディスパッチキューを使用しますか?

タスクが自分自身を追加したり、キューが各要素間でループしたりする可能性があります。それは私にとって重要ではありません

答えて

2

標準キューを使用するが、ロックを使用しない場合は、ロックフリーキューの実装を探します。 C++ 11に標準のロックフリーキューはありません。

1つのキューの代わりに、コア/スレッドごとにタスクのベクトルを使用し、それらのサイクルを繰り返すのはなぜですか?たとえば、4つのCPUとスレッドを持っている場合は、それぞれのタスクのベクトルを持ちます。それらの間でタスクを均等に分散させ、最後の文でループしているコメントで言います。これはロックを持たず、複数のスレッドからの待ち行列には同じ処理順序保証(つまり、なし)があります。

関連する問題