我在寫一個需要快速Minkowski和計算的C++軟件。基於雙重足夠的實現。線程安全三角測量庫
我評估了一些幾何庫如
- CGAL
- LEDA
- boost::geometry(不具有可夫斯基和執行,但有一個tutorial解釋如何實現它)
但我最終使用了另一個第三方庫,與前一個相比非常快s並使用FIST庫進行三角測量。
我的代碼工作或多或少以下列方式:
- 我讀我的多邊形
- 我計算閔可夫斯基總結,我需要
- N次
- 我決定哪些多邊形用於下面的計算
- 我做一些基於閔可夫斯基和的東西
- 我給一個val UE到結果
- 我採取與作爲最終結果
由於內環路的計算最佳值的結果是獨立的一輪輪,我並行循環,一切運行良好。
於是我決定將明可夫斯基和計算每個並行輪:
- 我讀我的多邊形
- 對於number_of_threads(= N)次
- 我決定在要使用的多邊形以下計算
- 我計算我需要在這一輪閔可夫斯基總和
- 我做一些基於閔可夫斯基總和
- 我給的值的結果
我採取與作爲最終結果
但第三方庫的工作沒有更多的最佳值的結果。
我得到number_of_threads - 1
錯誤信息,說
斷言失敗。
導致從運行斷言失敗改變運行,並從線程到線程的文件,但它們都是C-文件具有相同的名稱FIST頭(雖然我有第三方庫的源代碼,我只有一個.lib和FIST庫的頭文件)
如前所述,我試着計算我在並行化代碼之外所需的所有Minkowski和,並使用其中的結果。這沒關係。所以我幾乎可以肯定問題來自FIST。
我有兩個問題:
你知道,如果FIST庫是線程安全的?
如果不是,請問您可以給我一個線程安全(C或更好的)C++三角測量庫來替換FIST(可能具有相當的性能)嗎?
編輯:
其實,我不知道是不是「線程安全的」這正是我想要的:我只需要能夠計算許多獨立的三角在同一時間tringulation庫。
我認爲,如果庫有沒有全局變量,如果它有一個類沒有static
變量
class triangulation
{
// no static variables
void execute_triangulation();
}
它可能是不夠的。 所以我可以使用這個類的不同實例並且同時運行它們的方法。
通常,如果未明確指定爲線程安全,則可能需要將所有內容視爲_not_線程安全。 –
目前還不清楚這是由於您的庫的線程安全性還是代碼中的錯誤。目前還不清楚您是否應該擔心線程安全問題。 – Mikhail
@Mikhail你說得對,我會編輯我的問題 – 888