Synchronization
[ Threads represent the application's tasks. Every thread
expects to be uninterrupted in its operations as if it had its own CPU and it is
our job to make sure that this happens. Every thread has its own copy of the
Stack, CPU state, and CPU data and shares system objects and resources with the
other threads in the domain of its owner process. A thread can have an input
queue related to it. ]