Допустим, SYNCHRONICED
равно 0, когда запись вставлена или обновлена, 1, когда запись отправлена на сервер, и 2, когда сервер подтвердил синхронизацию.
Поток T1 должен выполнить:
BEGIN;
SELECT ID, VALUE FROM TAB WHERE SYNCHRONICED = 0;
UPDATE TAB SET SYNCHRONICED = 1 WHERE SYNCHRONICED = 0;
COMMIT;
Оператор select
дает записи для отправки на сервер.
Теперь любой insert
или update
в TAB должен установить SYNCHRONICED = 0;
Когда сервер отвечает ack,
UPDATE TAB SET SYNCHRONICED = 2 WHERE SYNCHRONICED = 1;
Это не повлияет на какие-либо записи, обновленные или вставленные, поскольку их SYNCHRONICED
равно 0.