这个可能不一定是针对java的hash map实现,因为java的hash map可以用synchronizedMap()来获得线程安全的hash map。但是我目前使用的hash table非常大,如果每次发生冲突进行extend操作时对全表加锁,会消耗很多时间,我希望可以在extend的同时仍然可以同步进行一些非互斥的读写操作。例如4个bucket的hashmap,采用h1(x)=x mod 4,当扩展时将变为h2(x)= x mod 8,那么原本存储在0,1,2,3号bucket中的元素需要redistribute,但是在进行redistribute的过程中如果有读或写的访问,就可能出现不一致。例如 x=6,原来在2号bucket,当我们扩展后h2(x)指向6号bucket,但是实际的值可能还没有被copy到相应的bucket里。所以需要设计一个机制来决定相应的hash function。Thanks。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货