monitor term
lock + condition variables, packaged together
Higher-level primitive: object owns a lock, threads can wait on conditions inside it, get woken when conditions change. Java's synchronized + wait/notify is a monitor. C# lock + Monitor.Pulse, etc.