Уточнение доступа к атомарной памяти для разных ОС - PullRequest
0 голосов
/ 11 января 2011

В настоящее время я портирую библиотеку Windows C ++ на MacOS в качестве хобби-проекта для обучения. Я наткнулся на некоторый код, используя функции Win Interlocked *, и, таким образом, я пытался прочитать эту тему в целом.

Читая связанные вопросы здесь, в SO, я понимаю, что существуют разные способы выполнения этих операций в зависимости от ОС. Взаимосвязанный * в Windows, OSAtomic * в MacOS, и я также обнаружил, что компиляторы имеют встроенные (встроенные) операции для этого.

После прочтения gcc доступа к встроенной атомарной памяти мне остается задаться вопросом В чем разница между встроенной и OSAtomic * или блокированной *? между OSAtomic * или встроенным gcc, если я использую gcc на MacOS? То же самое, если бы я был в Windows, используя gcc.

Я также читал, что в Windows Interlocked * имеются как встроенные, так и встроенные версии. Что следует учитывать при выборе встроенного или встроенного?

В общем, есть ли в ОС несколько вариантов того, что использовать? Или это опять "зависит"? Если так, от чего это зависит?

Спасибо!

1 Ответ

1 голос
/ 11 января 2011

Реальная проблема заключается в следующем.

Чипсет Intel, который мы все знаем и любим, не имеет четко определенного порядка записи в память.

Техническая документация Intel® 64 для системной памяти с памятью . В этом документе делается попытка тщательно определить порядок записи в память.

[Этот документ был объединен с Томом 3A Руководства разработчика программного обеспечения для архитектуры Intel 64 и IA-32.]

Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, том 3А: Руководство по системному программированию, часть 1 Это пересмотр этого документа.

http://www.intel.com/products/processor/manuals/

Поскольку сам чип не гарантирует определенных порядков записи в память, он остается на усмотрение ОС для обеспечения согласованности.

«Это зависит» - «это зависит от API в ОС, для которой вы создаете программное обеспечение».

Больше чтения: http://en.wikipedia.org/wiki/Memory_ordering

http://rsim.cs.illinois.edu/Pubs/10-cacm-memory-models.pdf

...