我一直在修补BSP树一段时间,并且还在玩线程。当向BSP树添加三角形时,出现了为并行处理数据创建新线程的机会。我应该一起使用线程和递归吗?
insert(triangle, bspnode) { .... else if(triangle spans bspnode) { (frontpiece, backpiece) = plane_split(triangle, bspnode) insert(frontpiece, bspnode.front) insert(backpiece, bspnode.back) } .... }
上面的两个插入操作可以由两个线程执行,并且由于它们不修改相同的数据,所以可以使用便宜的同步。
insert(triangle, bspnode) { .... else if(triangle spans bspnode) { (frontpiece, backpiece) = split(triangle, bspnode) handle = beginthread(insert(backpiece, bspnode.front)) insert(frontpiece, bspnode.back) if(handle) { waitforthread(handle) } else { insert(backpiece, bspnode.front) } } .... }
这种新方法试图创建一个线程来完成并行操作,但如果线程不能创建应该不会失败(这将简单地恢复到原来的算法)。
这是一个完善的编程习惯,还是我使用线程不当?我一直无法找到关于这种技术的任何文献。我喜欢它倾向于使用我的CPU到最完整的(2个内核),并且理论上可以扩展到任何数量的可用处理器。我不喜欢它在CPU和内存上可能会非常浪费。如果处理的某些部分上的东西外等待
哦,他是RHYMES! :) HAHAH NICE! – Kiril 2008-12-01 17:05:30