2014-12-04 2 views
0

Я вижу, что у C11 есть дополнительные функции вокруг memory_order (<GCC_SOURCE>/gcc/ginclude/stdatomic.h, GCC Memory Model Wiki page, C11 Wikipedia entry).порядок памяти (модель согласованности) и C99

Мне любопытно узнать, что такое поведение по умолчанию на C99? предполагает ли модель последовательной согласованности по умолчанию?

ответ

2

Undefined. Многопоточное программирование выходит за рамки ранних стандартов C. Если вы пишете многопоточные программы C99, вы полагаетесь на обещания, сделанные вашим компилятором, а не на стандарт C.

1

Модели последовательности согласованности для _Atomic типов данных и операций над ними. Вся эта идея атомистики была введена только в C11, поэтому такие ограничения порядка памяти просто не применяются.

Единственная функция pre-C11, которая взаимодействует с атомикой, является сигналом. C99 имел только sig_atomic_t, которые позволяют передавать информацию между обработчиком сигнала и остальной частью программы. Здесь термин «атомный» следует понимать в первичном смысле, тип данных, который гарантированно читается или записывается целиком, а не частично, как это может случиться с более широкими типами данных.

В C11 определенные типы данных также могут вести себя хорошо в обработчиках сигналов. Так что это случай, когда вас может заинтересовать memory_order даже при отсутствии потоков.

Смежные вопросы