>>1
As
>>2 said, it's never simple because of shared data concurrency and race conditions. You'll soon discover the kind of crap you have to come up with if you want several threads to modify shared data, or read non-elemental data/dependent data at the same time. And you want to share data, otherwise you don't want threads.
Of course, you can do multithreading in C++. There's a way to make a function run in a new thread (and anything it calls will be executed in this new thread), this is simple. This is all that's simple. Then you need to learn about mutexes and semaphores.
You can search Win32 for CreateThread, CreateMutex, and their respective family of functions, and you can learn pthreads, but the best you can do is to use libSDL. It provides cross-platform, simple threading support which means this is the same for any OS and platform you work, be it Windows or Linux, PCs or Macs, and it works in C and C++. SDL's semaphores are also simpler than pthread's.
>>3
Fail, go back to 20 years ago Unix man
>>6
Some program designs may be easier to formulate using a multithreaded approach. After all, the real world is asynchronous!
The real world is also messy as hell.
An example of an inherently multithreaded task is a server.
>>7
ROFL, wins the thread