This is really interesting. For systems programming, files usually have clear ownership and modification context. If I call exists(), it should still exists for as long as that thread is paused.
It's an anti-pattern to throw errors for expected behavior.