2011-01-29 3 views
0

Допустим, у меня есть два потока, A и B. Я создаю Thread B от Thread A для доступа к функции.Выполнение функции потокобезопасности или нет?

Thread A использует функцию большую часть времени, а Thread B редко использует ее по определенной команде.

Если я делаю функцию потокобезопасной, поставив ее вокруг критической секции, не будет ли она делать Thread A медленной обработки за каждый раз, даже если Thread B не существует? Или должен ли я делать работу Thread B в Thread A сам, а не создавать его?

+5

Защита потоков для ресурсов, а не функций ... Если общих ресурсов нет, вам не нужно об этом беспокоиться. –

+0

В зависимости от того, изменяете ли вы глобальное состояние в функции. Если это так, вы, вероятно, собираетесь сэкономить много времени и усугубить, используя критические разделы, даже если B «редко» называет это. –

+0

Если 'Thread B' создается, а' Thread A' обращается к функции. будет ли ждать, что 'Thread A' оставит функцию? Функция имеет общие ресурсы, например, Edit Control. – user963241

ответ

1

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

3

ПРОФИЛЬ ПЕРВЫЙ. Коэффициенты хороши тем, что вес мьютекса не будет значительным - вы можете блокировать и разблокировать их миллионы раз в секунду. Код правильно - использование любого механизма блокировки меньше всего подвержено ошибкам или сбоям в вашей целевой системе, а затем только тогда, если вы видите, что вам нужно улучшить производительность, рассмотрите альтернативные стратегии.

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

Смежные вопросы