По мере выполнения потока в некоторый момент вдруг меняется его ID. Иными словами с некоторого момента времени pthread_self() начинает выдавать не тот ID потока, что был изначально. Причем новый ID по значению равен младшей части изначального. Что-то не пойму, как такое может быть. И даже не соображу пока, где искать ошибки.