Parallelism needs synchronization.

Avoid Data Race.

Synchronization problems are very cool and common:

We also really look into synchronization from a software implementation perspective.

Both the sender and receiver can be blocking or nonblocking.

3 common combinations:

  1. Blocking send, blocking receive: Oftentimes referred to as a rendezvous, used for tight synchronization between processes
  2. Nonblocking send, blocking receive: Most useful combination.
    • The send process can send one or more messages to a variety of destinations as quickly as possible.
    • The receive process must receive a message before it can do useful work needs to be blocked until such a message arrives
  3. Nonblocking send, nonblocking receive: Neither party is required to wait