Многопоточность и pthread_join

Моя программа читает лабиринт из текстового файла, затем основная программа создает 3 различных потока, чтобы вникать в этот лабиринт и искать выход. Когда поток обнаруживает выход, он публикует свой путь решения в основном потоке.

В этом лабиринте есть подводные камни, которые при столкновении с потоком «умирают», сохраняя местоположение этой ошибки в глобальном массиве обнаруженных точек ошибок, чтобы другие потоки знали, где следует избегать. После того, как этот поток умирает, основная программа возродит другой поток, чтобы занять его место и продолжить обход лабиринта.

Поток может столкнуться или не встретиться с ловушкой, и использование pthread_join ожидает только определенного потока. Как заставить основной поток ждать каждого из потоков одновременно?

1

Решение

Используйте условную переменную, которая в pthreads pthread_cond_t, Пусть основной поток ожидает переменную условия, и непосредственно перед тем, как поток умирает, он сигнализирует переменную условия. В псевдокоде что-то вроде этого:

основная нить

//spawn first set of threads
while(!done) {
pthread_cond_wait(&cond, &mutex);
//spawn another thread
}

рабочая нить

//traverse maze
pthread_cond_broadcast(&cond);
//thread exit

Обратите внимание, что при использовании условной переменной вам нужно получить и освободить связанный мьютекс. Посмотрите на справочную страницу для pthread_cond_wait Больше подробностей.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]