It’s hard if you have unprotected, shared mutable state.
If you use a language that uses immutable data structures (Haskell, Clojure, Erlang) it’s easy!
If you use a language that won’t let you share mutable data without the required protection (Rust) it’s also easy!
Everything else and you can be sure that even if it looks like it works, it most likely doesn’t.
It’s hard if you have unprotected, shared mutable state. If you use a language that uses immutable data structures (Haskell, Clojure, Erlang) it’s easy! If you use a language that won’t let you share mutable data without the required protection (Rust) it’s also easy! Everything else and you can be sure that even if it looks like it works, it most likely doesn’t.