This section describes why synchronization is needed in multi-threading applications.
The biggest problem of allowing multiple threads sharing the same data set
is that one operation in one thread could collide with another operation
in another threads on the same data. When this happens, the result is un-desirable.
Let's use a bank application program as an example. Assuming that the program
has multiple threads running, with each thread connecting one ATM system, and
you have a saving account in the bank with $100.00, now you and your friend
are going to two different ATMs at about the same time, and trying to withdraw
$50.00 from your account, what do you think it will happen?
If the threads are running independently, the following could happen:
Time 01:01 02:01 03:01 04:01
+----------+---------+---------+-------
Thread 1 Get Set
Action You Account Account You
Withdraw Balance Balance Receive
$50.00 $100.00 $50.00 $50.00
Time 01:02 02:02 03:02 04:02
-+----------+---------+---------+------
Thread 2 Get Set
Action Friend Account Account Friend
Withdraw Balance Balance Receive
$50.00 $100.00 $50.00 $50.00