I wrote my first-ever code in a multiprocess environment and when I got to multithreaded code it was second nature, it never gave me difficulties.
I would stay away from abstractions like patterns, I don’t think they help.
I see nothing especially difficult in multithreading, the only consideration is preventing multiple threads from accessing the same data at the same time. In Win32 I used mutexes, critical sections, etc; in .NET there is lock(). I don’t see it as difficult or even terribly challenging and I have never had trouble using threads. I written extremely multithreaded code in iOS in applications that dealt with facebook an they were more stable than most applications from Apple.