Why doesn’t enqueueing messages in Erlang require a lock?
The Erlang runtime does attempt to take the lock of another running process if it is available, but it seems perfectly able to manipulate parts of the recieving process without taking the process’s locks:
https://github.com/erlang/otp/blob/master/erts/emulator/beam/erl_proc_sig_queue.c#L773