看板 C_and_CPP 關於我們 聯絡資訊
如果有一個 linled list 具有 insert , delete 跟 search 功能 其中 search 會回傳目前資料所在的指標 若今天在全域段建立此 linked list 則在 multithread 的情況下 會有一個問題: 一個 thread 回傳 search 完所得到的指標 可是另一個 thread 隨後執行了 insert 或 delete 使得目標位置改變了 以致於指標所指的位置出錯 該如何設計同步使得這個情況得以避免呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.161.175.138
hpeter:r/w semaphore? or mutex 06/20 16:14
ledia:lock ! 06/21 00:02
ledia:唔 我錯了, 如果你要容許這種行為, 那就要回傳一個 clone 了 06/21 00:03
ledia:又或者是做一個 reference table, delete 之是 mark delete 06/21 00:03
ledia:在 reference 真正用完才能實體 delete ... 會變得有點複雜 06/21 00:04
softwind:可能要用特製的pointer 當ptr所指物被del 要通知 refer. 06/21 00:34
softwind:可能要用 observer patterm去做 06/21 00:34
elfkiller:哇哇 理解不能= = 看樣子超出我的能力很多 還是避開好了 06/21 02:21
wowtiger:就多做一個 reference count 並且要有 atomic 函式來加減 06/21 17:13