Я понимаю разницу между Compare и Swap и блокировкой потоков для обработки общих ресурсов.
Чего я не понимаю, так это того, почему вы используете сравнение и переключение между потоками.
Когда конкуренция за ресурсы высока, сравните и своп приведет к большой потере цикла ЦП, поэтому в этом случае лучше использовать блокировку потоков.
Когда конкуренция низкая, сравните и поменяйте местами мог будет использоваться, так как потеря ЦП будет намного ниже, а стоимость этой потери может быть быть ниже, чем стоимость приостановки и перезапуска потоков.
При низкой конкуренции частота операций сравнения и замены или блокировки потоков, которые когда-либо используются, также будет низкой, поэтому экономия затрат будет менее существенной.
Я думаю, что сейчас я задаю два вопроса.
Какова временная стоимость нескольких потраченных впустую циклов ЦП по сравнению с временными затратами на приостановку и повторный запуск потоков в Java / C ++?
И есть ли конкретная частота раздоров (то есть количество раздоров в секунду), которая определяет, что лучше использовать одно над другим?
Я предполагаю, что это становится намного более важным для приложений с низкой задержкой.
Это полностью зависит от того, каким ресурсом вы должны делиться … помните, что сам блокирующий поток должен сохранять переменную, которую он сравнивает и меняет ее внутренне, поэтому стоимость уже понесена. Плюс другие затраты включают переключение контекста потока и затем вышел.