Вы должны убедиться, что последовательность событий, вызывающих состояние гонки, действительно возникает во время тестирования. Для этого вам нужно повлиять на чередование потоков внутри тестового примера.
Этого можно добиться с помощью дополнительной (условной) синхронизации или (более простых и менее надежных) дополнительных таймеров. Поместите несколько вызовов sleep () в критические секции, чтобы убедиться, что они выполняются достаточно долго, чтобы другой поток мог прийти в нежелательное состояние. Когда у вас это работает, замените спящие вызовы явной синхронизацией (то есть блокируйте один поток, пока другой фактически не подтвердит прибытие).
Затем сделайте все это условным для глобального флага, установленного в тестовом примере.