Уточнение доступа к атомарной памяти для разных ОС

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

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

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

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

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

Спасибо!


person murrekatt    schedule 11.01.2011    source источник


Ответы (1)


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

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

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

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

Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, том 3A: Руководство по системному программированию, часть 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

person S.Lott    schedule 11.01.2011
comment
Я не совсем понимаю, что вы имеете в виду. Что это означает для встроенных функций gcc? Можно ли их использовать в любой ОС, а также в конкретных, таких как OSAtomic* и Interlocked*? - person murrekatt; 11.01.2011
comment
@murrekatt: встроенные модули GCC предназначены для POSIX-совместимых ОС. Это часто включает MacOS. Windows не является POSIX-совместимой ОС. Однако, поскольку встроенные программы ориентированы на аппаратное обеспечение, они могут работать и в Windows. Windows нестандартна, поэтому ваш выбор библиотек зависит от вашей целевой ОС. - person S.Lott; 11.01.2011
comment
@ С.Лотт, понятно. Тогда возьмем мой пример, где я сейчас на MacOS. Теперь я могу выбрать либо OSAtomic*, либо встроенные функции компилятора, верно? Как выбрать? Что учитывать? - person murrekatt; 11.01.2011
comment
@murrekatt: Что учитывать? Опять таки. Вы учитываете ОС, для которой вы строите. Если вы пишете программное обеспечение GNU/Linux, соответствующее стандарту POSIX, вы используете GCC. Если вы пишете программное обеспечение для MacOS, которое не соответствует стандарту POSIX GNU/Linux, вы можете использовать библиотеки MacOS. - person S.Lott; 11.01.2011
comment
@S.Lott: Хорошо, кажется, я понял. Подводя итог, означает ли это, что для MacOS есть два варианта (gcc или osatomic), для Windows — только Interlocked* (встроенный или встроенный), а для Linux — один gcc? - person murrekatt; 11.01.2011
comment
@murrekatt: я думаю, что это самый безопасный способ просмотра, да. - person S.Lott; 11.01.2011