joe armstrongのプログラミングerlangの8.11の練習問題で質問です。
一番目の問題の「spawn(Fun)をAnAtomとして登録する関数start(AnAtom, Fun)を書くという問題で、
2つのプロセスがstart/2を呼び出した場合もプログラムが正しく動作するようにすること。」と言う問題で以下のコードを書きました。

start(AnAtom, Fun) ->
undefined = whereis(AnAtom), %% ここのコードはまずい?
register(AnAtom, spawn(Fun)).

erlangの並行処理のモデルがよくわかっていないのですが、
上のコードのコメントが書かれているところででプロセスAがwhereis(AnAtom)をundefinedに評価した後に別のプロセスBに切り替わってwhereis(AnAtom)をまた
undefinedに評価することはありえるのでしょうか?それともノンプリエンティブマルチタスクに似た並行処理モデルなのでしょうか?

こういうことに気にしないようにregisterを呼び出すプロセスを作って、
そのプロセスにregisterを呼び出すようにメッセージを送ったほうが良いのでしょうか?