2012-05-02 2 views
14

В чем причина того, почему is_lock_free требует экземпляр (это функция-член)? Почему не метафункция типа или статическая функция-член constexpr?Почему is_lock_free функция-член?

Я ищу фактический пример того, почему это необходимо.

+0

Это называется 'is_instance_free'? Нет. КЭД. –

+6

Кажется, это из-за производительности [цитата отсюда] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html): «Предложение предусматривает блокировку функции запросов на отдельные объекты, а не целые типы, чтобы разрешить неизбежно смещенные атомные переменные, не наказывая производительность согласованных атомных переменных. –

+2

@JesseGood, который звучит как ответ. Почему это комментарий? ;) –

ответ

23

Стандарт допускает тип иногда не содержит блокировки.

раздел 29,4 безблокировочного свойство

Атомное _..._ LOCK_FREE макросы указывают свойство блокировки свободного от соответствующих атомарных типов, с подписанными и неподписанных варианты сгруппированных вместе. Свойства также применимы к соответствующим (частичным) специализациям атомного шаблона. Значение 0 указывает, что типы никогда не блокируются. Значение 1 указывает , что типы иногда блокируются. Значение 2 указывает, что типы всегда блокируются.

В C++ atomic paper n2427 состоянии причина:

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

А также (как Jesse Good указал):

Предложения предусматривает безблокировочную функцию запросов по отдельным объектам, а не целые тип, чтобы разрешить неизбежно неровные атомные переменные без нанесения ущерба производительности выровненные атомные переменные

+0

Я добавил в другую цитату для полноты. – Pubby

+0

Несомненно. Эта часть также имеет отношение к вашему вопросу. Я пропустил это. – user2k5

+0

Я мог бы также представить себе реализацию с фиксированным числом атомных значений или что-то подобное. – Yakk

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