Sadly I have heard a number of stories/expereiences like this. That's why the original Posix.4 specification had a new API: asynchronous system traps (AST) similar to what most other real time systems have had such as RSX, VMS or VxWorks for that matter and true async I/O calls. The idea was instead of trying to "fix" signals or read/write, put a new (optional) API in that had the proper semantics for a real IPC (like being queued, having priority etc...). The AST call was later removed and z queued hacked was splitter into signals although async I/O did stay. I was sad to see AST go. I always felt it was better to not "fix" it, but rather offer and optional way that me the needs of people that wanted it.
FWIW: I've implemented AST a couple of times in my career into UNIX systems. Very handy why you really want those semantics.
Clem