@ Комментарий Карла - ответ.Не начинайте обработку в потоке A, пока поток B не завершит инициализацию.Для этого они посылают сигнал из потока B в поток A о том, что он запущен и работает.
Вы не упомянули ОС, поэтому я дам вам псевдокод Windows-ish.Перекодируйте в выбранную вами ОС / библиотеку.
Сначала создайте объект Windows Event.Это будет использоваться в качестве сигнала:
Нить A:
HANDLE running = CreateEvent(0, TRUE, FALSE, 0);
Затем у Нити A начнется нить B, передавая ей событие:
Нить A:
DWORD thread_b_id = 0;
HANDLE thread_b = CreateThread(0, 0, ThreadBMain, (void*)handle, 0, &thread_b_id);
Теперь в потоке A, дождитесь, пока событие не сообщит:событие:
Тема B:
DWORD WINAPI ThreadBMain(void* param)
{
HANDLE running = (HANDLE)param;
do_expensive_initialization();
SetEvent(running); // this will tell Thread A that we're good to go
}