Вносит ли atomic_load () с memory_order_relaxed какие-либо дополнительные издержки по сравнению с простым чтением из переменной?

Я не вижу причин для дополнительных издержек для «родных» интегралов ЦП, но я могу ошибаться,
так что я хотел бы услышать мнение сообщества

Моя настоящая проблема касается некоего связанного списка, который относительно редко изменяется, но часто читается (аналогично типичному случаю использования RCU). Идея состоит в том, чтобы предоставить 2 режима доступа для операций только для чтения: первый режим используется, если структура теперь изменяется (алгоритм полной блокировки без блокировки), и второй облегченный режим для «спокойного» случая (с обходом неатомарного списка). Во втором (облегченном) случае я собираюсь использовать атомарные нагрузки с memory_order_relaxed, но если это слишком дорого, мне нужно сделать какой-то обходной путь (например, атомное значение в неатомарной переменной или эмулировать каким-либо образом предложенный memory_order_nonatomic http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1446.htm , так далее.)

Я понимаю, что ответ зависит от реализации атомарного (и ЦП), но я надеюсь, что реализация должна вести себя разумно 🙂

2

Решение

memory_order_relaxed Модель просто позволяет переупорядочивать операции сохранения / загрузки, но все же обеспечивает атомарное чтение / запись. На некоторых архитектурах ЦП это приведет к блокировке шины, очистке кеша и т. Д. Поэтому обычно ответ да — атомарный доступ с memory_order_relaxed считается более дорогим, чем неатомарный доступ.

3

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

Других решений пока нет …

По вопросам рекламы [email protected]