Статическое утверждение для атомарного чтения / записи значения - PullRequest
4 голосов
/ 04 апреля 2011

Есть ли способ проверить, является ли чтение / запись (загрузка / сохранение) значения атомарным? У меня есть специализированные версии параллельных контейнеров, которые могут работать только с такими значениями, и я хотел бы добавить статическое утверждение для предотвращения случайного неправильного использования.

Для всех основных типов в x86_64 это верно, но это может быть не верно для всех платформ или всех длинных типов данных. Кроме того, возможно, что небольшие структуры и объединения также будут назначены с атомарной операцией (так как они будут просто скомпилированы для использования основной операции копирования того же размера).

Ответы [ 2 ]

2 голосов
/ 04 апреля 2011

В проекте C ++ 0x есть раздел с макросами в заголовке , который указывает на то, что нет простого и удобного способа проверить это в противном случае.

29.4 Блокировка-free свойство [atomics.lockfree]

#define ATOMIC_CHAR_LOCK_FREE implementation-defined 
#define ATOMIC_CHAR16_T_LOCK_FREE implementation-defined 
#define ATOMIC_CHAR32_T_LOCK_FREE implementation-defined 
#define ATOMIC_WCHAR_T_LOCK_FREE implementation-defined 
#define ATOMIC_SHORT_LOCK_FREE implementation-defined 
#define ATOMIC_INT_LOCK_FREE implementation-defined 
#define ATOMIC_LONG_LOCK_FREE implementation-defined 
#define ATOMIC_LLONG_LOCK_FREE implementation-defined

Макросы указывают типы, в которых std :: atomic может быть реализован без блокировки, что означает, что они являются атомарными всами по себе.

0 голосов
/ 04 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...