Энергозависимые переменные 'чтения' с такой скоростью, как нормальные чтения?

Я предполагаю, что вы спрашиваете, как удалить ВСЕ файлы в папке сборки или папке bin, а не выбирать каждый файл отдельно.

Вы можете использовать эту команду:

git rm -r -f /build\*

Убедитесь, что вы находитесь в родительском каталоге построить каталог.
Эта команда рекурсивно «удалит» все файлы, которые находятся в папках bin / или build /. Под словом «удалить» я подразумеваю, что git сделает вид, что эти файлы «удалены», и эти файлы не будут отслеживаться. Git действительно отмечает, что эти файлы находятся в режиме удаления.

Убедитесь, что ваш .gitignore готов к предстоящим коммитам.
Документация: git rm

39
задан oxbow_lakes 7 July 2009 в 06:33
поделиться

4 ответа

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

В отличие от одного другого ответа здесь, изменчивые переменные используются не только для драйверов устройств ! Иногда они необходимы для написания высокопроизводительного многопоточного кода!

0
ответ дан 27 November 2019 в 02:53
поделиться

Это зависит от архитектуры. Что volatile делает, так это говорит компилятору не оптимизировать эту переменную. Это заставляет большинство операций рассматривать состояние переменной как неизвестное. Поскольку он непостоянен, он может быть изменен другим потоком или другой аппаратной операцией. Таким образом, при чтении потребуется перечитать переменную, и операции будут иметь тип чтения-изменения-записи.

Этот вид переменных используется для драйверов устройств, а также для синхронизации с мьютексами / семафорами в памяти.

1
ответ дан 27 November 2019 в 02:53
поделиться

Ответ в некоторой степени зависит от архитектуры. На x86 нет дополнительных накладных расходов, связанных с изменчивым чтением, хотя есть последствия для других оптимизаций.

Поваренная книга JMM от Дуга Ли, см. Таблицу архитектуры внизу.

Для пояснения: нет никаких дополнительных накладные расходы, связанные с самим чтением. Барьеры памяти используются для обеспечения правильного заказа. JSR-133 классифицирует четыре барьера: «LoadLoad, LoadStore, StoreLoad и StoreStore». В зависимости от архитектуры, некоторые из этих барьеров соответствуют запрету на работу, что означает, что никаких действий не предпринимается, для других требуется ограждение. С самой Нагрузкой не связано неявных затрат, хотя они могут быть понесены, если установлен забор. В случае x86 только барьер StoreLoad приводит к ограждению.

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

Volatile это не то, что следует использовать бойко, но и этого не следует бояться. Есть много случаев, когда volatile будет достаточно вместо более жесткой блокировки.

13
ответ дан 27 November 2019 в 02:53
поделиться

volatile означает, что компилятор не может оптимизировать переменную, поместив ее значение в регистр ЦП. Доступ к нему должен осуществляться из основной памяти. Однако он может быть помещен в кэш ЦП. Кеш будет гарантировать согласованность между любыми другими процессорами / ядрами в системе. Если память привязана к вводу-выводу, все немного сложнее. Если бы он был разработан таким образом, оборудование предотвратит кэширование этого адресного пространства, и все обращения к этой памяти будут осуществляться на оборудовании. Если такой конструкции нет, разработчики оборудования могут потребовать дополнительные инструкции ЦП, чтобы гарантировать, что чтение / запись проходит через кеши и т. Д.

Как правило, ключевое слово volatile используется только для драйверов устройств в операционных системах. .

-3
ответ дан 27 November 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: