提问人:arunK 提问时间:1/11/2023 更新时间:1/11/2023 访问量:26
在 Stripe Read Write lock 中处理 Hash Collison
Handle Hash Collison in Stripe Read Write lock
问:
我们将条带锁用于我们的一个实现。我们在某个最终常量上采用读锁,在键上采用写锁。我们注意到我们遇到了一个死锁,因为两个不同密钥的哈希码被证明是相同的。因此,这就像将读锁升级为写锁一样,我们遇到了死锁。以下是 Stripe 库用于生成哈希码的代码。处理这种僵局的最佳方法是什么?
条带代码:
static int smear(int hashCode)
{
hashCode ^= hashCode >>> 20 ^ hashCode >>> 12;
return hashCode ^ hashCode >>> 7 ^ hashCode >>> 4;
}
static final int indexFor(Object key)
{
int hash = smear(key.hashCode());
int mask = ceilToPowerOfTwo(2003) -1;
return hash & mask;
}
static int ceilToPowerOfTwo(int x)
{
return 1 << IntMath.log2(x, RoundingMode.CEILING);
}
public static void main(String[] args) {
String publicKey = "$public";
int hash = indexFor(publicKey );
for(int i=0;i<1000;i++) {
String key = "key"+i;
if(indexFor(key) == hash) {
System.out.println("Hash of "+key + " is same as hash of public");
}
}
}
我们的逻辑:
Take readLock on publicKey
Take writeLock on key
release the write lock
release the read lock
答: 暂无答案
评论