開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
google/sparsehash.h
問題(Question):
大家好。
我的某個程式要開30個threads同時執行,
但這30個核心都要共用同一個Google Sparse Hash Map,
所以我餵給這些threads的是某個Hash Table的pointer,
因此它們會共用這張Hash Table。
問題來了,這樣執行起來往往會造成core dumped,
一開始我用#pragma omp critical
將寫入這張Hash Table的程式碼(只有一行)包起來,
執行起來居然會Core dumped!
後來改成將每個讀取或寫入到這張table的程式碼都包起來,
但這顯然不是個好辦法,因為30核的效果會大打折扣,趨近於單核的速度。
後來改成針對不同的key值,
用omp_test_lock和omp_unset_lock去包住,
區別不同的critical section。
卻還是會造成core dumped!
所以開始懷疑是不是Google Sparse Hash不支援以key區分不同的執行緒的功能?
能解決這奇怪問題的我願意給500P
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):