Here is something I knocked up: https://github.com/mcapodici/haskelllearn/tree/master/stocke...
https://en.m.wikipedia.org/wiki/Non-blocking_algorithm
Lots of abstractions ‘hide’ the locks from you. Very few are lock free.
All kidding aside, most programs require some sort of multithreading but the ones I write haven’t needed explicit mutex, semaphores or locks. (And I’ve been doing this 30+ years.)