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
/* the message buffer is stored as a
pointer to the first message, and a pointer
to the address of the last message */
*this = first; /* `this` is the `last` of the destination queue */
dest_queue->last = last;
(comments mine)
The data being manipulated is not access-controlled by locks of any kind (at this point), and yet it is safe in a parallel environment. I cannot determine why this is safe – surely two processes could attempt to modify these pointers at the same time, leading to a race?