With respect to multithreading, synchronization is the capability to control the
access of multiple threads to shared resources. Without synchronization, it is possible
for one thread to modify a shared object while another thread is in the process
of using or updating that objectís value. This often causes dirty data and leads
to significant errors.