почему производительность `try_lock всегда ведет себя как` lock` на мьютексе? - PullRequest
0 голосов
/ 11 сентября 2010

На мьютексе: я спрашивал о производительности lock здесь и о производительности try_lock здесь .

Вопрос о try_lock был закрыт как точный дубликат вопроса о lock. Однако я не понимаю, почему try_lock должен вести себя так же, как и lock в каждой возможной реализации мьютекса.

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

Почему это так? Это потому, что есть только один возможный способ реализации try_lock? (Т.е. самый естественный способ.)

1 Ответ

1 голос
/ 13 сентября 2010

Производительность try_lock на данном мьютексе тесно связана с реализацией lock.Если для блокировки мьютекса всегда требуется системный вызов, то try_lock, скорее всего, также потребует системного вызова.С другой стороны, если lock имеет «быстрый путь», который выполняется в пространстве пользователя без системного вызова, то try_lock, скорее всего, будет иметь реализацию, аналогичную этому «быстрому пути».Фактически, общая реализация lock в основном if(!try_lock()) lock_with_system_call().

...