1) Оконный сервер. Программа определяет буфер окна (что-то наподобие canvas'а), рисует в нём, потом посылает сигнал обновления своего окна. Окно изменено. Да, конечно это можно реализовать через нынешние IPC функции, но если программа будет делать тысячи таких обновлений в минуту (например, видеоигра или медиаплеер) скорость будет очень медленная. Через сигналы же, всё будет куда быстрее
2) Многопоточная программа. Например, файловый менеджер. Человек копирует файлы. В этот момент другой поток отрисовывает основное окно (которое при этом неактивно). Как только поток, копирующий файлы, завершает работу он даёт сигнал основному потоку - тот разблокирвывает окно и работа с ФМ-ом продолжается.
3) Консоль. При запуске консольной программы, оболочка создаёт блок расшаренной памяти и передаёт сведения о нём консольному приложению. Утилита командной строки делает свою работу, заливает в буфер различные данные и посылает сигнал оболочке. Оболочка этот буфер обрабатывает, изменяет если надо, выводит на экран то, что нужно и так далее. Опять же скорость может быть больше, чем при работе через 60-ую функцию.
4) Завершение работы. Перед выключением ОС может оповестить каким-то стандартным сигналом все процессы (вместо того, чтобы тупо их убить) и даёт им возможность сохранить изменившиеся данные.
Основные преимущества - не нужно определять буфер памяти, не нужно к этому буферу обращаться (что даёт большой прирост скорости), упрощение работы с IPC.
Эта идея требует до- и проработки, поэтому я предлагаю обсудить это.