Должны ли аргументы функции pthread быть размещены в стеке или куче? - PullRequest
2 голосов
/ 26 апреля 2019

Я написал «решение» проблемы «производитель-потребитель / ограниченный буфер» с использованием pthreads, и я использую 72-битную структуру для хранения данных и типов синхронизации, которые являются общими для всех потоков. Эта структура размещается в куче, но размещение ее в стеке и передача ее адреса в pthread_create также работает. Есть ли какая-либо причина предпочитать выделение стека, а не выделение кучи (или наоборот) аргументов pthread в случаях, когда pthread_detach используется , а не используется?

Edit:
Структура объявлена ​​в main(), и все потоки гарантированно завершатся до завершения main(). Выход за рамки не является проблемой.

1 Ответ

1 голос
/ 26 апреля 2019

Это зависит от времени жизни выделенных переменных стека по отношению к запущенным потокам.

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

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