Pthread вернуть результаты - PullRequest
3 голосов
/ 16 сентября 2011

У меня есть вопрос о возврате результатов из выполняемой функции pthread.

Код, связанный с:

void* thread_func(void* args)
{
    float result = 0;
    // ...do something
    return (void*)&result;
}

// ... using code
float answer;
pthread_join(pthread_handle, &answer);

Мне кажется, что такое решение не должно работать безопаснопотому что result будет находиться в стеке thread_func и прекратит существование после возврата thread_func.Тем не менее, во всех тестах, которые я сделал, это работает безупречно.Есть ли что-то, что я неправильно понимаю, почему это безопасно?Если нет, и мои тесты только что сработали из-за какой-то случайности, как мне безопасно вернуть возвращаемое значение из thread_func безопасно?

1 Ответ

10 голосов
/ 16 сентября 2011

Это не безопасно.Вам просто повезло (или, скорее, не повезло).После завершения функции все автоматические переменные будут потеряны (поэтому указатели на них бесполезны).

  • Используйте malloc и верните эту память
  • Используйте статический объект (глобальная переменная дляэкземпляр)
  • Использовать память, переданную функцией, которая присоединится

В заключение используйте память, которая сохранится после завершения функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...