So the moral of this story is that if you need to fix a bottleneck in the real world, you mainly use erlang then drop into C (port/nif) where necessary?
I'd say that Rust is telling you that you don't correctly understand your use of shared data. This should be looked upon as a great prompt to figure it out.
I faced a similar issue with "getting" Rust. I found that a close reading of https://doc.rust-lang.org/book/ownership.html and subsequent sections - backed up by Chapter 5 of the O'Reilly book "Programming Rust" - the most useful way forward.
It's still harder, but the code I have as a result is much, much more robust than it would otherwise have been.