Как освобождать динамическую память, которую используют два потока?

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

int *arr[N];
...
thread thr(Daughter);
thr.detach(); 
...
delete[] arr;

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

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

Как и когда освобождать память?

Надо заметить, что дочерний поток сам не может освобождать память, поскольку она может может быть востребована в главном потоке и после завершения дочернего.
  • Вопрос задан
  • 338 просмотров
Пригласить эксперта
Ответы на вопрос 1
Тут не С++, но суть должна быть понятна.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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