Re: [問題] ReadWriteLock 用在map上的每個field

看板java作者 (Alien)時間18年前 (2007/09/30 01:42), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/4 (看更多)
※ 引述《easy1 (e :) y)》之銘言: : 標題: [問題] ReadWriteLock 用在map上的每個field : 時間: Sat Sep 29 19:59:26 2007 : : (最進有不少cocurrency的問題f@@) : : 後來想想我的問題主要還是在read/write sync 上 : 在網路上找找 發現 : java.util.concurrent.locks.ReentrantReadWriteLock : 可以很方便的作到read-write lock (應該比自己寫安全,又比synchronized有彈性用) : : 但是我在網路上看到的範例都是把ReadWriteLock 用在整個map上 : (可同時讀, 但write是絕對exclusive) : : 我異想天開說 : 那可不可以把map裡每個field(key-value pair) 都指定一個個別的ReadWriteLock : : 這樣在write某一個field時 就不會block住其他field的讀寫... : 每個field又可以作到read write sync : (當然先決條件是每個field都絕對沒有關係) : : 只是不知道這樣實不實際 有提升效率嗎 還是太多lock object會有問題 : 不知道有人有類似的經驗 或有什麼見解嗎 : : "理論上"看起來不錯 還沒有測試過... 沒有什麼異想天開的,我記憶中我有做過類似的東西. 當然一般來說不會搞這些麻煩東西 XDD : : -- : PLUR : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 79.210.96.247 : 推 H45:上上篇不就和你現在說的很像了嗎? 09/29 23:46 : 推 H45:但事實上 write 的時候會修改容器屬性,這必須防止其他人寫入 09/29 23:48 : 推 sbaby0416:值得一提的是 這樣是可以做的 但是要考慮你讀寫頻率 09/30 00:26 : → sbaby0416:如果你寫的頻率很頻繁 這樣的作法會令你要求兩次W Lock 09/30 00:29 不會兩次 W lock. 一般來說的做法是,要新加入 entry, 才會acquire map 的 W lock. (新加入 entry 也不需取新 entry 的 W lock 哪) 修改現有的 entry 的話則只取 map read lock, 然後取 entry write lock. Alien -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.77.26.195
文章代碼(AID): #16_evj-a (java)
討論串 (同標題文章)
文章代碼(AID): #16_evj-a (java)