Зачем использовать сравнение и замену потоковой блокировки (Java / C ++), обусловлено ли это определенной частотой раздоров?

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

Когда конкуренция за ресурсы высока, сравните и своп приведет к большой потере цикла ЦП, поэтому в этом случае лучше использовать блокировку потоков.

Когда конкуренция низкая, сравните и поменяйте местами мог будет использоваться, так как потеря ЦП будет намного ниже, а стоимость этой потери может быть быть ниже, чем стоимость приостановки и перезапуска потоков.

При низкой конкуренции частота операций сравнения и замены или блокировки потоков, которые когда-либо используются, также будет низкой, поэтому экономия затрат будет менее существенной.

Я думаю, что сейчас я задаю два вопроса.

Какова временная стоимость нескольких потраченных впустую циклов ЦП по сравнению с временными затратами на приостановку и повторный запуск потоков в Java / C ++?

И есть ли конкретная частота раздоров (то есть количество раздоров в секунду), которая определяет, что лучше использовать одно над другим?

Я предполагаю, что это становится намного более важным для приложений с низкой задержкой.

2

Решение

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

0

Другие решения