私はしばらくの間BSPツリーをいじくり回していて、スレッドもいじっています。BSPツリーに三角形を追加すると、データを並列処理する目的で新しいスレッドを作成する機会が生じます。
insert(triangle、bspnode)
{{
...。
else if(三角形はbspnodeにまたがる)
{{
(口絵、口絵)= plain_split(triangle、bspnode)
挿入(口絵、bspnode.front)
insert(backpiece、bspnode.back)
}
...。
}
上記の2つの挿入操作は、2つのスレッドで実行できます。また、同じデータを変更しないため、安価な同期を使用できます。
insert(triangle、bspnode)
{{
...。
else if(三角形はbspnodeにまたがる)
{{
(口絵、口絵)= split(triangle、bspnode)
handle = beginthread(insert(backpiece、bspnode.front))
挿入(口絵、bspnode.back)
if(ハンドル)
{{
waitforthread(ハンドル)
}
そうしないと
{{
insert(backpiece、bspnode.front)
}
}
...。
}
この新しいメソッドは、スレッドを作成して操作を並行して完了しようとしますが、スレッドを作成できない場合でも失敗することはありません(単に元のアルゴリズムに戻ります)。
これは適切なプログラミング手法ですか、それともスレッドを不適切に使用していますか?私はこの技術に関する文献を見つけることができませんでした。私は、CPUを最大限に(2コア)使用する傾向があり、理論的には、使用可能な任意の数のプロセッサーに拡張できるのが好きです。CPUとメモリにひどく無駄になるのは好きではありません。