Pre / Post неумножение атомных указателей? - PullRequest
2 голосов
/ 12 июля 2011

В старые добрые времена 68k оба приращения / уменьшения до / после указателя были более или менее гарантированно атомарными из-за относительно общей взаимосвязи между указателем стека и другими более общими адресными регистрами.Поскольку это поведение явно является артефактом 68k, который не может обеспечить наиболее эффективную реализацию на альтернативной платформе, я был бы прав, предполагая, что спецификация C не претендует на «атомарность» этих операций.

Ответы [ 4 ]

4 голосов
/ 12 июля 2011

Буду ли я прав, предполагая, что спецификация C не претендует на "атомарность" этих операций.

Да.Нынешний стандарт (как C99, так и C89, IIRC) не претендует на атомарность.Это определенно зависит от платформы и, вероятно, зависит также от компилятора.

Почему эти операции должны быть атомарными, если можно спросить?

1 голос
/ 12 июля 2011
Стандарт

C вообще не имеет атомарных операций.Однако есть некоторые встроенные модули GCC , описанные здесь , и некоторые из них C ++ 0X стандарт .И вы всегда можете использовать POSIX или другую многопоточную библиотеку или встроенный ассемблер в своем коде.

0 голосов
/ 12 июля 2011

Нет гарантии атомарности, если это явно не задокументировано. Согласно действующему стандарту C это означает, что no переносимый код может гарантировать атомарность - атомарные операторы обязательно зависят от платформы.

Как отмечает @ninjalj в своем комментарии, C1x добавит атомарные операторы.

0 голосов
/ 12 июля 2011

Независимо от того, что указано в стандарте, арифметика указателей 80x86 и присваивания для «огромных» указателей не были атомарными, но приращения и присваивания указателей могут состоять из атомарного чтения и атомарной записи на всех платформах, где «int» имеет значение 32 бита или больше или , где указатель имеет тот же размер, что и int (некоторые встроенные платформы имеют такие вещи, как 16-битный int, но 24-битный указатель). Однако последовательность чтения-изменения-записи почти никогда не будет образовывать атомарный элемент в любой многопроцессорной архитектуре, если только не будут предприняты явные меры, чтобы заставить ее вести себя так.

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