(простое) повышение thread_group вопрос

касательно будет, вероятно, дросселировать на пустом указателе, так как он, по-видимому, ожидает изменять существующий объект. ожидает пустой указатель, так как он возвращает новый объект.

24
задан Gordon Gustafson 7 August 2009 в 21:38
поделиться

2 ответа

Я думаю, что ваша проблема вызвана деструктором thread_group, который вызывается при выходе из вашей программы. Группа потоков хочет взять на себя ответственность за уничтожение ваших объектов потока. См. Также документацию boost :: thread_group .

Вы создаете объекты потока в стеке как локальные переменные в области действия вашей основной функции. Таким образом, они уже были уничтожены, когда программа выходит из программы, и thread_group пытается их удалить.

В качестве решения создайте объекты потока в куче с помощью new и позвольте thread_group позаботиться об их уничтожении:

boost::thread *t1 = new boost::thread(threaded_function, 10);
...
g.add_thread(t1);
...
29
ответ дан 28 November 2019 в 22:47
поделиться

add_thread () становится владельцем потока, в котором вы проходите. Группа потоков удаляет поток. В этом примере вы удаляете память, выделенную в стеке, что является серьезным нарушением.

Функция-член add_thread ()

void add_thread (thread * thrd);

Предварительное условие :

Выражение delete thrd равно правильно сформирован и не приведет к неопределенное поведение.

Эффекты:

Станьте владельцем boost :: thread объект, на который указывает thrd, и добавьте его в группу.

Постусловие :

this-> size () увеличивается на 1.

Не уверен, что это не так в вашем коде, или это просто пример ошибки. В противном случае код выглядит нормально.

3
ответ дан 28 November 2019 в 22:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: