View Javadoc
1   package locklib.sx;
2   
3   import locklib.LockPolicy;
4   import ensure.Ensure;
5   
6   /**
7    * Locking policy for SX locking. In an SX locking policy, locking a
8    * child requires share-locking its parent.
9    */
10  public class SxLockPolicy implements LockPolicy<SxLockType> {
11  	/**
12  	 * Is starvation allowed?
13  	 */
14  	private boolean m_starvation_allowed;
15  	
16  	/**
17  	 * Creates a new SX locking policy.
18  	 * @param starvation_allowed is starvation allowed? (see
19  	 * {@link LockPolicy#starvation_allowed()})
20  	 */
21  	public SxLockPolicy(boolean starvation_allowed) {
22  		m_starvation_allowed = starvation_allowed;
23  	}
24  
25  	@Override
26  	public boolean is_compatible(SxLockType lock_type_1,
27  			SxLockType lock_type_2) {
28  		Ensure.not_null(lock_type_1, "lock_type_1 == null");
29  		Ensure.not_null(lock_type_2, "lock_type_2 == null");
30  		
31  		if (lock_type_1 == SxLockType.S_LOCK
32  				&& lock_type_2 == SxLockType.S_LOCK) {
33  			return true;
34  		}
35  		
36  		return false;
37  	}
38  
39  	@Override
40  	public SxLockType parent_lock(SxLockType lock_type) {
41  		Ensure.not_null(lock_type, "lock_type == null");
42  		
43  		return SxLockType.S_LOCK;
44  	}
45  	
46  	@Override
47  	public boolean starvation_allowed() {
48  		return m_starvation_allowed;
49  	}
50  }