Предположим, есть две переменные, хранящиеся в одной и той же строке кэша ЦП, если я успешно использую CAS одну из переменных, будет ли вся строка кэша обновляться сразу после инструкции CAS?Будет ли строка кэша кэша процессора после сравнения и свопинга?
ответ
Он не нуждается в обновлении, он уже обновлен. Видимость кэша (в обычных системах и типах памяти) гарантирует, что любая строка кэша, считываемая с обычными операциями, обладает таким же результатом, как если бы вся память была плоской и обновлялась последовательно. Если, с другой стороны, вы имеете дело с частичным, WC, потоковым или любым другим необязательно-когерентным доступом, то вы не получите эту гарантию.
С заблокированными операциями это обычно достигается аппаратными средствами путем захвата внутренней блокировки по линии кэша, так что CAS выполняется атомарно (read-modify-write), но это ортогонально когерентности кеша. Независимо от выполняемой вами операции (даже в простом хранилище) любая операция чтения, попадающая в эту строку кэша сразу после «(младше в порядке выполнения программы в том же потоке или в хронологическом порядке потом на любом другом потоке/ядре), увидит линию после операции CAS. Конечно, доступ из других потоков также может отследить линию до этой операции и увидеть старые данные (в зависимости от порядка вашей системной памяти и любых мер предосторожности, которые принимает ваш код).
Да, это полный барьер памяти в этой строке кэша. Поэтому, если вы обновили некоторую другую переменную в одной и той же строке кеша, а затем выполните свою атомную операцию, значение будет видимым для всех других процессов/потоков.
Это, как говорится, если вы неатомарную обновление на другой переменной в этой строке кэша, вы до сих пор не имеют гарантию, что данные будут делать это, в отличие от некоторых других процессоров писать одновременно к этой другой переменной в одной и той же строке кеша. Ваша гарантия заключается в том, что эти данные являются либо данными, которые вы только что написали, либо тем, что написал какой-то другой поток.
- 1. Очистка кэша процессора без инсталляции кэша?
- 2. чтение содержимого кэша процессора
- 3. Обновление кэша кэша после развертывания
- 4. Сохраняет ли jvm гарантию обновления кэша процессора после переключения потоков?
- 5. Профилирование кэша процессора для кода C# .net?
- 6. Как получить размер кэша процессора в Linux
- 7. Рекурсия, стеки и промахи кэша
- 8. Что такое максимальный размер кэша кэша Xcache?
- 9. Блокировка ключа кэша без блокировки всего кэша
- 10. Предотвращение отказа кэша приложений после возврата манифеста кэша 404
- 11. понимание кэша процессора с использованием программы C
- 12. Состояние кэша Apache GZIPs, это трата процессора?
- 13. Как найти размер кэша процессора для процессора x86
- 14. Могу ли я сбросить/изменить содержимое x86 кэша процессора/TLB
- 15. Есть ли все-таки, чтобы записать время пропусков кэша процессора?
- 16. Когда строка кэша ЦП покраснела в память после записи?
- 17. Обновление асинхронного кэша с абстракцией весеннего кэша
- 18. Поле кэша кэша по ehcache в java
- 19. Объединение сеанса и кэша
- 20. коллекции и обновления кэша backbone.js
- 21. Перенаправление на HTTPS при использовании кэша кэш-кэша/кэша приложений
- 22. Моделирование кэша и ошибки страниц
- 23. Память кэша и блокнота
- 24. Реализация кэша с использованием структуры кэша
- 25. когерентность кэша и WPF
- 26. Координаты DataNucleus и кэша
- 27. Dache «Исключение хоста кэша недоступного кэша»
- 28. Размер кэша процессора, о котором сообщает/sys/device/и dmidecode
- 29. кэша смещения, индекс кэша, кэш теги
- 30. Когда строка кэша сначала загружается в программу?