Spec-Zone.ru › GCC 12

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-12.2.0/gcc/x86-specific-memory-model-extensions-for-transactional-memory.html

Spec-Zone.ru

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