[問題] Sparse Hash Map多執行緒的問題(threads)
開發平台(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):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.123.104.195
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1458292838.A.62D.html
推
03/18 17:30, , 1F
03/18 17:30, 1F
這就不太清楚了,有相關範例說明嗎?
→
03/18 17:34, , 2F
03/18 17:34, 2F
while(!omp_test_lock(locker));
讓它自己無窮迴圈
※ 編輯: henry8168 (140.123.104.195), 03/18/2016 18:29:58
→
03/18 19:34, , 3F
03/18 19:34, 3F
如果那個locker本來就是被set成1的呢?這代表已經有其他thread在做這塊了吧,
是要怎麼卡住其他threads的執行ˊ_>ˋ?
推
03/18 20:06, , 4F
03/18 20:06, 4F
這不錯耶!
到concurrent hash table的官網,這邊大家可以載他們的source code安裝:
https://www.threadingbuildingblocks.org/download#stable-releases
而這是簡單的code示範:http://goo.gl/Dqk2Xk
→
03/18 21:55, , 5F
03/18 21:55, 5F
→
03/18 21:56, , 6F
03/18 21:56, 6F
→
03/18 21:58, , 7F
03/18 21:58, 7F
→
03/18 21:58, , 8F
03/18 21:58, 8F
好像是你說的這樣沒錯!不過我剛改用omp_set_lock()和omp_unset_lock()去包住,
Sparse Hash還是會core dumped耶...。
感覺是Google Sparse Hash本身就不支援同時讀取?
※ 編輯: henry8168 (36.236.72.170), 03/18/2016 22:20:09
→
03/18 22:24, , 9F
03/18 22:24, 9F
→
03/18 22:25, , 10F
03/18 22:25, 10F
→
03/18 22:26, , 11F
03/18 22:26, 11F
※ 編輯: henry8168 (58.115.109.218), 03/27/2016 01:41:42
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章