-2

私はコア2デュオプロセッサーを持っています。

8つのスレッド(間に共有データがない)を作成して実行したいので、いつでも8つすべてが1回実行され、スレッド1とスレッド2が同時に実行され、スレッド1とスレッド2が実行できる場合はtプロセッサで同時に実行するスレッド1がスレッド2の前に実行されるように、スレッド1を優先します。

同様に、スレッド3と4は同時に実行できますが、スレッド3とスレッド4を同時に実行できない場合は、スレッド3をスレッド4の前に実行し、スレッド1と2の前ではなく、スレッド5と6とスレッド7の後に実行します。スレッド8。

スレッド5とスレッド6、スレッド7とスレッド8についても同じです。

8つのスレッドすべてがタスクを完了した後、8つのスレッドは、終了するまで上記の順序で何度も実行されます。

Windows7でC++とVisualStudio2008を使用してこれを実現するにはどうすればよいですか?

これをC++で実装することは可能ですか?

4

3 に答える 3

0

わかりました、実際にあなたから質問を得るために多くの論争をした後、ここに私が答えようとしているバージョンがあります:

スレッドを作成した後、2 つのスレッドがデュアル コア プロセッサで同時に実行されるとは限りません。したがって、2 つのスレッドが同時に実行されない場合は、スレッド 1 (最初に作成された) が最初に実行され、スレッド 2 (2 番目に作成された) が常にスレッド 1 の後に実行されるように、優先順位が与えられます。

幸いなことに、その答えはかなり単純です。プログラムは、どのスレッドがいつ実行されるかを知りません。OS は、いつスレッドを開始および停止するかを通知しないため、「スレッド 1 は実行中ですか? そうでない場合は一時停止して実行します」チェックをコーディングすることはできません。

ただし、スレッドに異なる優先順位を設定することはできます。これは、実行のためにスケジュールする必要があるものを OS に示します。スレッドの優先度を徐々に下げていきます (スレッド 1 の優先度が高く、スレッド 2 の優先度が 1 段階低くなるなど)。Windows では、Windows は常に優先順位の最も高い利用可能なスレッド/プロセスを選択しようとするため、これは実際にはかなりうまくいく可能性があります。Linux は、すべてのスレッドにある程度の実行時間を確保しようとしますが、単純に優先順位の高いスレッドにより多くの時間を与えます。

そしてもちろん、このように優先順位をいじると、PC で実行されている他のすべてのものとの関連で、プログラムがどのようにスケジュールされるかに影響します。あなたは本当にこれを間違った方法で進めようとしています。より健全な解決策は、これを並列化するための別のスキームを見つけることです。

于 2012-10-20T13:22:11.847 に答える
0

スレッドの実行順序を制御できるとは思いません。スレッドが作成されると、OS がスケジューリングを行います。親スレッドでスレッドが終了するのを待つだけです。

于 2012-10-20T12:35:38.043 に答える
0

何?実行スレッド 1 を使用してから、スレッド 2 を使用したい ...

スレッドを使用しないでください。while ループを使用して呼び出します。

While(1)
{
   foo1();
   foo2();
   foo3();
   .
   .
   .
}
于 2012-10-20T12:35:54.813 に答える