package voldemort.utils;
/**
* A parallel keyed lock
*
* @author jay
*
*/
public class StripedLock {
private static final FnvHashFunction hash = new FnvHashFunction();
private final Object[] locks;
public StripedLock(int locks) {
this.locks = new Object[locks];
for(int i = 0; i < this.locks.length; i++)
this.locks[i] = new Object();
}
public Object lockFor(int key) {
return locks[Math.abs(key % locks.length)];
}
public Object lockFor(long key) {
int k = (int) (key % Integer.MAX_VALUE);
return lockFor(k);
}
public Object lockFor(byte[] key) {
return lockFor(hash.hash(key));
}
}