作者adrianshum (Alien)
看板java
标题Re: [问题] ReadWriteLock 用在map上的每个field
时间Sun Sep 30 01:42:04 2007
※ 引述《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