I don't really understand the rationale by which you think pthread_kill (or anything else) should be any sort of barrier if it isn't clearly specified in POSIX (or appropriate standard for something else) that it must be one. Whatever conclusion applies to pthread_kill should also apply to kill, sigqueue, killpg, gsignal, and possibly raise.