вызов мьютекса try-lock против вызовов CAS - PullRequest
5 голосов
/ 08 сентября 2011

Поскольку мьютекс в большинстве систем реализован с использованием операций CAS, меня интересует сравнение производительности этих двух конструкций.

Справедливо ли сказать, что если мьютекс реализован с использованием CAS, товызов try-lock для этого мьютекса будет иметь такую ​​же / аналогичную производительность по сравнению с операциями CAS?

CAS, поскольку сильно зависит от системы, я подумал, можно ли его кратко заменить более известным / стандартизированным производнымэто, mutex try-lock.

Ответы [ 2 ]

4 голосов
/ 09 ноября 2011

Ваше рассуждение обоснованно; в любой разумной реализации стоимость операции «trylock» будет примерно такой же, как и в случае CAS. Тем не менее, CAS в целом не может быть заменен попыткой блокировки; trylock - более слабый примитив, который не может манипулировать произвольными данными.

3 голосов
/ 08 сентября 2011

Нечестно говорить что-либо об относительной производительности CAS против блокировки. Разные ОС реализуют блокировки по-разному. Win32 необходимо переключать контекст в ядро, что медленно, Linux имеет мьютексы пространства пользователя. Производительность также будет сильно различаться в зависимости от степени важности критического раздела. Вам также нужно подумать о том, что вы делаете в критическом разделе, увеличиваете ли вы одно целое число или выполняете сложную операцию? Таким образом, существует множество переменных, которые влияют на относительную производительность, и вы не можете делать об этом широкие заявления.

Я бы порекомендовал использовать ваш язык / платформы, проще всего использовать абстракцию блокировки. Измерьте производительность и посмотрите, приемлемо ли это для вас.

...