Re: [問題] ReadWriteLock 用在map上的每個field
※ 引述《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
討論串 (同標題文章)