The main problems with multi-core programming are the same as writing any other parallel applications, but while before it was unusual to have several processors on a computer, it is now difficult to find any modern computer with one core in it, therefore To use multi-core architectures with multiple processors, new problems arise.
But this problem is an old problem, when computer architectures go beyond compilers, then it seems that the transition to functional programming seems to be a backup solution, since this programming paradigm, if strictly followed, can make very parallelizable programs, since you don’t, for example, have either global mutable variables.
But not all problems can be easily accomplished using FP, so the goal is how easy it is to easily get other multi-code programming paradigms.
Firstly, many programmers avoided writing good applications with multiple applications, so there wasn’t a well-trained number of developers, as they learned habits that would make their coding difficult.
But, as with most changes in the processor, you can see how to change the compiler, and for this you can look at Scala, Haskell, Erlang and F #.
For libraries, you can look at the extension of the parallel MS structure to simplify parallel programming.
It works, but I recently had either IEEE Spectrum or IEEE Computer had articles on multi-core programming issues, so check which IEEE and ACM articles were written on these issues to get more ideas on what is being considered.
I think the biggest obstacle will be the difficulty of getting programmers to change their language, since FP is very different from OOP.
One of the research areas, besides developing languages that will work well, is a way to handle multiple threads accessing memory, but, like in this area, Haskell seems to be at the forefront of testing ideas for this, so you can see what happens to Haskell.
Eventually new languages will appear, and perhaps we have DSL to help the abstract developer more, but how to train programmers on this will be a daunting task.
UPDATE:
You can find chapter 24. Parallel and multi-core programming, http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html