推 stupid0319: 用儲列排隊寫入? 03/18 17:30
這就不太清楚了,有相關範例說明嗎?
→ Schottky: 你的 omp_test_lock 沒 lock 到的話是怎麼處理的? 03/18 17:34
while(!omp_test_lock(locker));
讓它自己無窮迴圈
※ 編輯: henry8168 (140.123.104.195), 03/18/2016 18:29:58
→ Schottky: ..... 既然如此何苦用 test,用 omp_set_lock 不就好了 03/18 19:34
如果那個locker本來就是被set成1的呢?這代表已經有其他thread在做這塊了吧,
是要怎麼卡住其他threads的執行ˊ_>ˋ?
推 LiloHuang: 可考慮改用 Intel TBB 的 tbb::concurrent_hash_map 03/18 20:06
這不錯耶!
到concurrent hash table的官網,這邊大家可以載他們的source code安裝:
https://www.threadingbuildingblocks.org/download#stable-releases
而這是簡單的code示範:http://goo.gl/Dqk2Xk
→ Schottky: ..... 若已經被 lock,omp_set_lock() 會 block 住, 03/18 21:55
→ Schottky: 等待此 lock 被其他人釋放,才取得 lock 繼續。 03/18 21:56
→ Schottky: 所以切記,一個 thread 千萬不可在手上持有 lock 時 03/18 21:58
→ Schottky: 再去 set 一次,這樣就變成永遠解不開的 dead lock 了 03/18 21:58
好像是你說的這樣沒錯!不過我剛改用omp_set_lock()和omp_unset_lock()去包住,
Sparse Hash還是會core dumped耶...。
感覺是Google Sparse Hash本身就不支援同時讀取?
※ 編輯: henry8168 (36.236.72.170), 03/18/2016 22:20:09
→ Schottky: 基本上 omp_set_lock 和你原本的作法沒有多少差別 03/18 22:24
→ Schottky: 會 core dump 的還是會 core dump 03/18 22:25
→ Schottky: 我那樣問只是懷疑你在 omp_test_lock 沒鎖到時處理有錯 03/18 22:26
※ 編輯: henry8168 (58.115.109.218), 03/27/2016 01:41:42