Te recomiendo que leas un poco sobre como es la arquitectura de apps distribuidas, para que no hagas vueltas innecesarias como usar variables boolean tratando de implementar (macheteramente!) un lock, osea: La sugerencia que te dan y las ideas de este thread son la forma incorrecta - e innecesaria- de implementar lo que buscas. A proposito, seria bueno que tuvieras claro exactamente que es lo que quieres. Ademas, es mejor primero definir como son las cosas y LUEGO definir que tecnologia usas, no vaya ser que pelees contra la corriente y trates de hacer en X lo que seria natural en Y. Por ejemplo, es un sinsentido intentar que un protocolo asincronico se vuelva sincronico... sabiendo que podrias usar un sincronico desde el inicio.
Un excelente compendio de muchas de esas arquitecturas esta en la guia de 0mq:
http://zguide.zeromq.org/page:all
P.D: Mira si lo que buscas se acomoda a uno de los estilos que se plantean aqui, como un modelo PUSH-SUB, REQ-REP, FAN-OUT, etc
Te recomiendo que si no sabes exactamente que usar, 0mq es una buena eleccion que cubre casi de todo, a menos que necesites que funcione a escala internet. En ese caso, usa HTTP (sincro) o WebSocket (async).