Aparte de lo obvio (WCF), hay una ZeroMQ vinculante para C#/CLR que es bastante bueno:
http://www.zeromq.org/bindings:clr
¿Tiene orientado a mensajes IPC, pub/sub y varias otras estrategias con mucho menos código y configuración que WCF.
También es al menos un orden de magnitud más rápido que cualquier otra cosa y tiene menos latencia si requiere comunicaciones de baja latencia.
Con respecto a los semáforos, bloqueos, mutexes, etc. Si compartes comunicándote en lugar de comunicarte compartiendo, tendrás una carga completa menos complicada que el paradigma tradicional.
¿Qué necesitas hacer? Si necesita sincronizar el acceso a algún recurso externo, puede usar un Mutex para implementar la sincronización entre procesos. –
+1. Gracias a Dios. Esta es la primera instancia de preguntas con sabor a "Mejores Prácticas" que no está marcado como no constructivo/fuera del tema [que he visto nunca]. –