Что делает - префикс URL moz-документа () делает?

Модель памяти TSO в x86 является последовательной последовательностью + буфер хранилища, поэтому только хранилищам seq-cst требуется специальное ограждение. (Остановка после хранилища до тех пор, пока буфер хранилища не опустеет, до последующей загрузки - это все, что нам нужно для восстановления последовательной согласованности). Более слабая модель acq / rel совместима с переупорядочением StoreLoad, вызванным буфером хранилища.

(См. Обсуждение в комментариях относительно того, является ли «разрешение переупорядочения StoreLoad» точным и достаточным описанием того, что позволяет x86. Ядро всегда видит свои собственные хранилища в программном порядке, поскольку загружает отслеживание буфера хранилища, так что вы можете сказать, что хранилище Переадресация также переупорядочивает загрузки недавно сохраненных данных. За исключением случаев, когда вы не всегда можете: Инструкции загрузки невидимого на глобальном уровне )

(И, кстати, компиляторы, отличные от gcc, используют xchg для выполнения seq-cst store. На самом деле это более эффективно на современных процессорах. GCC mov + mfence в прошлом могли быть дешевле, но в настоящее время обычно хуже, даже если вы не заботитесь о старое значение. См. Почему хранилище std :: atomic с последовательной последовательностью использует XCHG? для сравнения между GCC mov+mfence и xchg. Также мой ответ на Что лучше написать барьер на x86: lock + addl или xchgl? )

Интересный факт: вы можете добиться последовательной согласованности, вместо этого ограждая seq-cst , загружая вместо stor эс. Но для большинства случаев дешевые грузы гораздо ценнее, чем дешевые магазины, поэтому каждый использует ABI, где в магазинах есть полный барьер.

См. https://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html для получения подробной информации о том, как атомарные операции C ++ 11 отображаются в последовательности команд asm для x86, PowerPC, ARMv7, ARMv8 и Itanium. Также Когда требуются инструкции x86 LFENCE, SFENCE и MFENCE?


, когда я использую std :: memory_order_release / acqu без оптимизации, также используется инструкция MFENCE

blockquote>

Это потому, что flag.store(true, std::memory_order_release); не встроен, потому что вы отключили оптимизацию. Это включает в себя встраивание очень простых функций-членов, таких как `` atomic :: store (T, std :: memory_order = std :: memory_order_seq_cst) `

Когда параметр упорядочения для встроенной функции __atomic_store_n() GCC равен переменная времени выполнения (в реализации библиотеки atomic::store()), GCC воспроизводит ее консервативно и переводит ее в seq_cst. На самом деле это может стоить того, чтобы gcc разветвлялся mfence, потому что это так дорого, но это не то, что мы получаем.

80
задан Charles Roper 14 November 2019 в 16:10
поделиться

3 ответа

Любое at-правило CSS, которое начинается с @ - moz- , является правилом для конкретного движка Gecko, а не стандартным правилом. То есть это расширение, специфичное для Mozilla.

Правило url-prefix применяет содержащиеся правила стиля к любой странице, URL-адрес которой начинается с него. При использовании без аргумента URL, такого как @ - moz-document url-prefix () , он применяется ко ВСЕМ страницам. По сути, это CSS-хак , используемый только для нацеливания на Gecko (Mozilla Firefox). Все остальные браузеры игнорируют стили.

См. здесь для получения списка других специфичных для Mozilla расширений.

91
ответ дан 24 November 2019 в 10:00
поделиться

@supports (-moz-appearance:none) {...} Работавший для меня в случаях, где - префикс URL moz-документа () {...} Не сделал.

1
ответ дан 24 November 2019 в 10:00
поделиться

Из https://developer.mozilla.org/en/CSS/@-moz-document

       @-moz-document url(http://www.w3.org/),
                   url-prefix(http://www.w3.org/Style/),
                   domain(mozilla.org)
    {
      /* CSS rules here apply to:
         + The page "http://www.w3.org/".
         + Any page whose URL begins with "http://www.w3.org/Style/"
         + Any page whose URL's host is "mozilla.org" or ends with
           ".mozilla.org"
       */

      /* make the above-mentioned pages really ugly */
      body { color: purple; background: yellow; }
}
17
ответ дан 24 November 2019 в 10:00
поделиться
Другие вопросы по тегам:

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