Also known as Pessimistic Locking.
Typical synchronization techniques are Lock Based Synchronization:
Semaphores,
Monitors, or
Messages (like using regular queues, but interprocess).
This division is most noticed in Unix, except that instead of Monitors, Unix has Shared Memory, which is just a communication mechanism which requires synchronization.
Java Language has monitors and nothing else. This is because Monitors are easier to use and they look a lot like classes. Besides, any of the three can be implemented using either of the other two.
And then Lock Free Synchronization was born.
Advanced Lock Based Synchronization: Rendez Vous, Read Write Lock.
See original on c2.com