В приложении запущены 2 потока, каждый пытается прочитать пакеты UDP на разных портах.
Сколько данных UDP вы отправляете / читаете? Как быстро вы отправляете это? Сколько ваших данных потеряно?
Это может быть состояние гонки ... Не между двумя потоками, а между потоком и сокетом!
Я видел проблемы в прошлом портировании кода с Linux на Windows. Windows использует (использовал) размер буфера UDP по умолчанию 8 КБ. Естественно, мы отправляли пакеты по 12 тыс., И просто невозможно было прочитать их достаточно быстро даже с выделенной веткой чтения!
Вы можете изменить размер буфера UDP (под Windows) следующим образом:
int newBufferSize = 128 * 1024; // 128k
setsockopt( readSocketFd, SOL_SOCKET, SO_RCVBUF, (char *) & newBufferSize );