2009-10-19 5 views
1

От the Wikipedia article on Read-Copy-Update:Частично обновлены значения, когда многопоточность по-прежнему вызывает беспокойство в отношении современных процессоров?

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

Это правда для всех современных процессоров (ARM, x86, PPC и т. Д.)? Возможно, это изменится в будущем? Кажется ужасно приятным никогда не оплачивать расходы на блокировку нагрузки, если вы не возражаете, чтобы снова получить старое значение (это, вероятно, не проблема для многих приложений - в основном для любого приложения, которое может использовать чтения, копирования и обновления).

ответ

1

Ну, если вы используете примитивные типы с размером < = размер шины данных, и данные выравниваются правильно, это верно. Таким образом, это больше зависит от вашего кода, а затем от современного процессора.

Вы можете предположить, что это будет продолжаться, потому что невозможно создать сборщик мусора, если могут быть частичные обновленные указатели. И использование префиксов блокировки вокруг каждого доступа к одному указателю полностью уничтожит производительность.

Да, статья правильная (опять же, предполагая размер и выравнивание).

+0

Я понимаю, что нереалистично для любых объектов размера, которые нужно обновить, но в какой-то момент частично не заполнены, но почему определяющим фактором является размер шины данных? Прошло некоторое время с тех пор, как я взял архитектуру;) –

1

По-прежнему небезопасно предполагать, что ваше оборудование будет поддерживать неконтролируемые обновления.

Если вы кодируете что-то низкоуровневое (C/C++), используйте макросы для переноса операций на основе. Тогда, если вы уверены, что определенная конфигурация оборудования будет работать изначально, вы всегда можете #define эти операции быть тривиальными, как если бы вы не защищали себя.

Но, как правило, лучше быть правым, чем быстро.