Используя Параллельные Расширения с атрибутом ThreadStatic. Это могло пропустить память?

Я использую Параллельные Расширения справедливо в большой степени, и я сейчас встретился со случаем, где использование локальной памяти потока могло бы быть разумным для разрешения повторного использования объектов рабочими потоками. Как таковой я смотрел на атрибут ThreadStatic, который отмечает статическое поле/переменную как наличие уникального значения на поток.

Мне кажется, что было бы неблагоразумно использовать PE с атрибутом ThreadStatic без любой гарантии повторного использования потока PE. Таким образом, если потоки создаются и уничтожаются, до некоторой степени был бы переменные (и таким образом возражает, что они указывают на), остаются в локальной памяти потока для некоторого неопределенного количества времени, таким образом вызывая утечку памяти? Или возможно устройство хранения данных потока связывают с потоками и избавляются, когда потоки расположены? Но затем у Вас все еще потенциально есть потоки в пуле, которые очень хотятся, жил и которые накапливают локальную память потока от различных частей кода, для которого используются потоки.

Существует ли лучший подход к получению локальной памяти потока с PE?

Слова благодарности.

6
задан redcalx 12 June 2010 в 17:31
поделиться

2 ответа

Я настоятельно рекомендую использовать обычный шаблон для локального хранилища потоков, описанный в этой статье MSDN .

Когда вы используете [ThreadStatic], важно то, очищает ли поток пула потоков переменные TLS при завершении. В документах MSDN нет никаких предположений, что это не так. Реализовать это несложно, достаточно вызвать API-функцию TlsFree (). Я написал небольшое тестовое приложение, никаких доказательств утечки.

5
ответ дан 10 December 2019 в 02:42
поделиться

РЕДАКТИРОВАТЬ: Учитывая ответ Ганса, похоже, что TLS на самом деле будет очищен в любом случае ... что просто оставляет этот бит ответа:

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

4
ответ дан 10 December 2019 в 02:42
поделиться
Другие вопросы по тегам:

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