Implementing a concurrent application is a difficult task. You have more than one thread in an execution at a time and all of them share resources, such as files, memory, objects, and so on. You have to be very careful with the design decisions you take. A bad decision can affect your program in a way that it would lead to poor performance or simply provoke data inconsistency situations.
In this chapter, I've included some suggestions to help you take correct design decisions, which would make your concurrent application better.