[問題] linked list 和 multithread

看板C_and_CPP (C/C++)作者 (沒有暱稱)時間16年前 (2009/06/20 15:11), 編輯推噓2(207)
留言9則, 5人參與, 最新討論串1/1
如果有一個 linled list 具有 insert , delete 跟 search 功能 其中 search 會回傳目前資料所在的指標 若今天在全域段建立此 linked list 則在 multithread 的情況下 會有一個問題: 一個 thread 回傳 search 完所得到的指標 可是另一個 thread 隨後執行了 insert 或 delete 使得目標位置改變了 以致於指標所指的位置出錯 該如何設計同步使得這個情況得以避免呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.161.175.138

06/20 16:14, , 1F
r/w semaphore? or mutex
06/20 16:14, 1F

06/21 00:02, , 2F
lock !
06/21 00:02, 2F

06/21 00:03, , 3F
唔 我錯了, 如果你要容許這種行為, 那就要回傳一個 clone 了
06/21 00:03, 3F

06/21 00:03, , 4F
又或者是做一個 reference table, delete 之是 mark delete
06/21 00:03, 4F

06/21 00:04, , 5F
在 reference 真正用完才能實體 delete ... 會變得有點複雜
06/21 00:04, 5F

06/21 00:34, , 6F
可能要用特製的pointer 當ptr所指物被del 要通知 refer.
06/21 00:34, 6F

06/21 00:34, , 7F
可能要用 observer patterm去做
06/21 00:34, 7F

06/21 02:21, , 8F
哇哇 理解不能= = 看樣子超出我的能力很多 還是避開好了
06/21 02:21, 8F

06/21 17:13, , 9F
就多做一個 reference count 並且要有 atomic 函式來加減
06/21 17:13, 9F
文章代碼(AID): #1AF8kvfP (C_and_CPP)
文章代碼(AID): #1AF8kvfP (C_and_CPP)