атомарная запись в сокет

Я использую process-send-string для отправки данных в соединение с сокетом , но меня не устраивает эффект от этой функции. Грубо говоря, вызов (process-send-string «foo») может закончиться отправкой «bar» , а затем «foo» , как объяснено ниже.

Как указали специалисты по сопровождению Emacs, код C строки process-send-string вызывает функцию wait_reading_process_output (даже до фактического написания чего-либо), которая может запускать таймеры, которые в Turn может вызвать process-send-string , и между такими вложенными вызовами не применяется никакого порядка.

Это делает практически невозможным реализацию протокола RPC, который предназначен для использования хуками, вызываемыми в неконтролируемое время. Итак, мой вопрос: как мы могли бы создать атомарный "синхронизированный" пишущий примитив для этой цели?

5
задан Tiphaine Turpin 20 February 2012 в 12:11
поделиться