I am self-learning concurrent programming. I have some experience with concurrent programming. Have self learned OS and programming.
There are both programming languages and libraries that provide concurrent programming facilities. I would like to learn about concurrent programming at OS and library levels (e.g. multithreading, multiprocessing, spin locks, semaphore, ...) and language level (e.g. monitor, future, promise, channels, conditional critical regions, Coroutine, ...). For the specific topics, I am referring to sections "Models", "Prevalence" and "Languages supporting concurrent programming" in https://en.wikipedia.org/wiki/Concurrent_computing and also concurrency patterns.
I would like to learn at conceptual as well as specific language levels.
Could you recommend some books which explain the different approaches at a concept level? It is good for such books to have specific languages and libraries as examples, but not necessarily especially if the books you recommend are classic but not contemporary.
Could you also recommend which specific languages and libraries and books on specific languages and libraries? For specific languages, I am currently interested in functional languages (such as Scala, Haskell, OCaml ...), Python, C#, Java, C/C++ and Go.
Academic books (text books, survey) and professional/practical books are both welcome.