Подтвердить что ты не робот

Пункты памяти в пользовательском пространстве? (Linux, x86-64)

Легко установить барьеры памяти на стороне ядра: макросы mb, wmb, rmb и т.д. всегда находятся на месте благодаря заголовкам ядра Linux.

Как это сделать на стороне пользователя?

4b9b3361

Ответ 1

Posix определяет ряд функций как действующие как барьеры памяти. Нельзя одновременно обращаться к местам памяти; чтобы предотвратить это, используйте синхронизацию - и эта синхронизация также будет работать как барьер.

Ответ 2

Вы ищете полный барьер памяти атомные встроенные gcc.

Обратите внимание, что в приведенной здесь ссылке указано, что

[следующие] встроенные функции предназначены для совместимости с функциями, описанными в разделе "Бинарный интерфейс для конкретных процессоров Intel Itanium", раздел 7.4. Таким образом, они отходят от обычной практики GCC с использованием префикса "__builtin_" и, кроме того, что они перегружены, так что они работают на нескольких типах.

Ответ 3

Использовать libatomic_ops. http://www.hpl.hp.com/research/linux/atomic_ops/

Это не специфичный для компилятора, и менее глючный, чем материал GCC. Это не гиганто-библиотека, которая предоставляет тонны функциональности, которые вам не нужны. Он просто обеспечивает атомарные операции. Кроме того, он переносится на разные архитектуры процессора.

Ответ 4

Linux x64 означает, что вы можете использовать инструкции по защите памяти Intel. Вы можете обернуть их в макросы, похожие на те, что указаны в заголовках Linux, если эти макросы не подходят или доступны для вашего кода.

Ответ 6

Библиотека профилирования Qprof (не связанная с Qt) также включает в свой исходный код библиотеку атомных операций, включая барьеры памяти. Они работают на многих компиляторах и архитектурах. Я использую его по моему проекту.

http://www.hpl.hp.com/research/linux/qprof/download.php4

Ответ 7

Просто заимствуя барьеры, определенные для ядра Linux, просто добавьте эти макросы в свой файл заголовка: http://lxr.linux.no/#linux+v3.6.5/arch/x86/include/asm/barrier.h#L21. И, конечно же, дать разработчикам Linux кредит в вашем исходном коде.

Ответ 8

В заголовках include/arch/qatomic_*.h недавнего дистрибутива Qt включен (LGPL) код для множества архитектур и всех видов барьеров памяти (приобретать, выпускать, оба).