"To explain why two mechanisms provide best performance
and atomic variables aid us, consider following scenario.
"First thread (the manipulator) has to find a particular object
in the data structure and change it. Second thread (the eraser)
deletes expired objects. From time to time, first thread tries to
manipulate an object that second thread tries to delete. This is a
classical scenario that can be found in almost any multithreaded
"Obviously two threads have to work with some sort of mutual
exclusion mechanism. Lets say we protect entire data structure with
a single mutex. In this case, manipulator thread has to hold the
mutex locked for as long as it takes it to find an object and to
manipulate it. This means that eraser thread won't be able to
access the data structure for as long as manipulator thread works.
If all manipulator thread does is searching for entries and
manipulates them, then eraser thread just won't be able to access
the data structure."