1 package locklib.sx;
2
3 import locklib.LockPolicy;
4 import ensure.Ensure;
5
6
7
8
9
10 public class SxLockPolicy implements LockPolicy<SxLockType> {
11
12
13
14 private boolean m_starvation_allowed;
15
16
17
18
19
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 }