Spec-Zone.ru › GCC 10

Следующее: Встроенные функции проверки размера объектов, Предыдущее: Встроенные функции для выполнения арифметических операций с проверкой переполнения, Выше: Расширения для языков семейства C [Содержание][Индекс]

6.57 Расширения модели памяти x86 для транзакционной памяти ¶

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

__ATOMIC_HLE_ACQUIRE

Начало исключения блокировки по переменной блокировки. Порядок памяти должен быть __ATOMIC_ACQUIRE или сильнее.

__ATOMIC_HLE_RELEASE

Конец исключения блокировки по переменной блокировки. Порядок памяти должен быть __ATOMIC_RELEASE или сильнее.

При отказе от получения блокировки для обеспечения хорошей производительности требуется быстро прервать транзакцию. Это можно сделать с помощью _mm_pause.

#include <immintrin.h> // For _mm_pause

int lockvar;

/* Acquire lock with lock elision */
while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
    _mm_pause(); /* Abort failed transaction */
...
/* Free lock with lock elision */
__atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.5.0/gcc/x86-specific-memory-model-extensions-for-transactional-memory.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API