Lock compatibility and lock sufficiency are two basic concepts that support issues of locking and concurrency.
Lock compatibility – if a task holds a lock on any resource (for example, row, page, partition, or table) can another task also hold a lock on the same resource?
Lock sufficiency, for the current task – is the current lock held on any resource (for example, row, page, partition, or table) sufficient if the task needs to access the resource again?
See Performance and Tuning Series: Locking and Concurrency Control > Introduction to Locking.