We learned how to use atomic variables for the synchronization of two or more threads in a multithreaded application. However, atomic variables can also be used to synchronize independent applications that run as separate processes.
We already know how to use shared memory for exchanging data between two applications. Now, we can combine these two techniques—shared memory and atomic variables—to implement both the data exchange and synchronization of two independent applications.