Какое эмпирическое правило для увеличения количества ссылок? - PullRequest
6 голосов
/ 11 мая 2011

При отправке объектов с подсчетом ссылок в другие потоки, лучше ли использовать эмпирическое правило для увеличения счетчика перед запуском потока или внутри потока?

В более общем смысле, должен ли я (как функция) считать, что переданные мне параметры уже учтены или нет?

1 Ответ

4 голосов
/ 11 мая 2011

Увеличение числа в новом потоке, которому вы передаете объект, почти наверняка неверно. Произвольное количество кода в «родительском» потоке может быть выполнено до того, как новый «дочерний» поток вообще сможет работать, и в этом случае функция в «родительском» потоке может вернуться, сделать некоторые другие вещи, уменьшить счетчик ссылок до 0 и освободить объект. Затем новый поток будет касаться недействительной памяти, вызывая неопределенное поведение, и весь ад потерпит неудачу.

Также обратите внимание, что такие ошибки, вероятно, будут оставаться незамеченными в течение длительного времени, поскольку статистически необычно, что новый поток не запускается немедленно. На самом деле, вероятно, ваши клиенты / клиенты первыми увидят ошибку ...: -)

...