That is also good, but requires apps be rewritten to read from signalfd. With the separate thread approach you can get away without having to rewrite programs.
Incorrect. With the separate thread approach you added a lot of new race conditions.
In practice I don't think there would be that many. You could even pause execution of the thread that would have gotten the signal to make it even safer.
And for people who want to use something other than Linux?