Designing concurrent object-oriented programs is hard. Correct programs mus
t coordinate multiple threads accessing composite objects, using low-level
mechanisms such as locks and read-write sets. Efficient programs must balan
ce the complexity and overhead of the coordination mechanisms against the i
ncreased performance possible through concurrency. A method-level algebra o
f exclusion provides a succinct description of the conditions under which a
thread must be excluded from a component of a composite object. Using the
algebra, programmers can check whether their programs meet their exclusion
requirements, can eliminate redundant exclusion controls, and can remove sy
nchronisation overhead by reducing concurrency.