我一直在修補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