обнаружение во время выполнения типа процессора - атомарные операции - PullRequest
0 голосов
/ 23 октября 2009

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

"Запись базовых типов размера t, int, float и указателя должна быть атомарной. Запись одним потоком должна просматриваться другими потоками в том же порядке. Используются архитектуры процессоров IA-32 и Intel-64, которые используются в большинстве современных стандартных компьютеров гарантируйте эти предположения. "

Что я хотел бы сделать, так это уметь во время выполнения определять, относится ли процессор к типу, в котором эти операции являются атомарными. - Я бы хотел, чтобы это работало и для процессоров AMD.

Ответы [ 3 ]

2 голосов
/ 23 октября 2009

Это звучит избыточно. .EXE для этого может быть просто int main() { return true; }. Либо он работает, и ответ правильный, либо ОС вообще не может запустить .EXE, поскольку тип процессора не соответствует типу .EXE.

1 голос
/ 23 октября 2009

Чтобы избежать этих проблем, связанных с CPU / платформой, вы можете рассмотреть следующие вопросы:

Ожидание std :: atomic в стандарте c ++ 0x (уже доступно для GCC)

или

Использование Intel TBB

или

Использование ACE_Atomic_Op

1 голос
/ 23 октября 2009

Я знаю, что это не по теме, но если вы планируете писать код без блокировки, вы должны обязательно прочитать этот первый Код без блокировки: ложное чувство безопасности от Herb Sutter

Цитата из статьи:

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

...