Normally, multithreaded programming would be one of the more advanced topics, if not the most advanced topic, in a book, but due to the .NET Framework, it is no more advanced than any other topic in this book. Why, you might ask? Well, the answer is that the .NET Framework (as usual) has hidden most of the complexities of this habitually complex area of software development within its classes.
Having the complexities hidden doesn't mean it's any less powerful or flexible than you doing the entire complex coding yourself. In fact, true to the nature of the .NET Framework, if you want to get lost in the details, you can still do so. On the other hand, because this chapter is about developing multithreaded programs using Managed C++ and not about multithreaded programming in general, I try to stay away from these details and let the .NET Framework deal with them. However, for those of you who like to delve into the details, I try to point you in the right direction for future exploration.
This chapter starts off by covering multithreaded programming at a high level, so those of you who are new to multithreaded programming can get comfortable with the concept. Next, you'll explore the more commonly used and, fortunately, easy-to-understand multithreaded programming features provided by the .NET Framework. With the basics covered, you'll explore some of the more complex areas of multithreaded programming, including thread states, priorities, and the weighty topic of synchronization. Finally, you'll learn about a second way of handling multithreaded programming: thread pools.