There are ways to perform parallel work that is "safe", Rust solves this with the borrow/checker implementation, another clear "safe" way would be to make everything immutable as seen on Haskell, Ocaml, F# to where who cares about who gets to what first if the underlying thing will never change.
Mutexes and locks and all the other ways of doing parallel work that is "safe" isn't a primitive thats cooked in with the language.