BrowserUK, thanks for that insight, that was exactly what I was looking for. I tried out PERL_SIGNALS=unsafe, and it did indeed cause the behavior to be what I was expecting, threads::join() is now "interrupted", exactly like pthread_join().
That being said, that's clearly a terrible idea in the long run, so I've refactored the code accordingly.