This synchoronizes signals with the op dispatch loop of the interpreter. The thread which gets the signal can then do work or communicate with other threads. There are multiple ways to support safe signals and they can all easily be supported. Event loops support safe signals by delivering them synchronously with the dispatch of other callbacks. Then the signal callback cannot collide with any others.
Threads can work with signals in two ways.
First, one or more threads can run event loops and the signal handlers are safe and can do work or communicate with other threads. Second, any thread can block on the special signal mailbox. When the signal is delivered, the blocked thread can continue safely and can then do the work for that signal. If you have only a single linear thread of code and want safe signals, you have to pay the penalty of checking for them in between Perl op codes. This can be done every N ops with N being some special global value.