Существует небольшая вероятность получить неверный результат когда поток изменяет данные в ключе и одновременно с этим утилита пытается их прочитать. Так как провал этих операций не критичен (то есть ни одна из конкурирующих программ не завершится аварийно) и может быть легко устранен (мы просто перезапустим утилиту и получим правильный результат) никаких особый действий предпринято не было.
Для тех, кому это интересно знать, один временной интервал для гонок возникает между записью сигнатуры и записью маркера или данных в блок. Другой интервал существует между освобождением tfpblk->string и созданием новой строки с установкой правильной длины. Правильным решением было бы запретить чтение блока, выполнить изменение данных и разрешить чтение блока после завершения изменений. Но и в этом случае мы имеем интервал неопределенности между моментом, когда TFP видит блок разрешенным на чтение и моментом, когда мы запрещаем его чтение.
Эта проблема не была исправлена просто потому, что вероятность такого случая очень мала и это восстановимая ошибка. Она могла бы быть полностью исправлена включением в структуру серийных номеров начала и завершения обновления данных. Перед началом изменения данных поток повышает «начальный» номер. После завершения работы с данными поток повышает «конечный» номер. Читать далее «Проблемы из-за отсутствия синхронизации»