Определение понятия «атомный объект» - PullRequest
0 голосов
/ 26 февраля 2019

В стандартном жаргоне C и C ++ фраза " атомарный объект " означает " объект из атомарного типа, " не так ли?

Ни один стандарт не будет явно определять каждую фразу, состоящую из двух слов, поэтому нельзя упрекать стандарты C и C ++ в том, что они не содержат явного определения этой фразы.Тем не менее, когда я читаю в стандарте C ++ 17 (черновик здесь ), раздел.4.7.1 (4), что «все модификации конкретного атомного объекта M происходят в некотором конкретном общем порядке, называемом порядком модификации M » -и когда в стандарте неоднократно используется один и тот же язык для разграничения еще более точной логики для параллелизма - я хотел бы быть уверен, что я не случайно ошибаюсь.

Правильно ли я предполагаю, что фраза "атомный объект" означает

  • объект из атомарный тип ?

Единственная правдоподобная альтернатива, которую я могу себе представить, состоит в том, что вместо этого фраза означает

  • правильно выровненный объект достаточно маленький, чтобы аппаратное обеспечение могло обрабатывать его атомарно.

Что это, пожалуйста?

(Примечание: я отмечаюэтот вопрос и C, и C ++, потому что, когда речь идет об атомарности, эти два стандарта используют почти идентичный язык. По этой причине, эксперт в любом языке может ответить, насколько мне известно. Если по какой-то причине я ошибаюсь,n удалите тег C и сохраните C ++.)

Ссылка: см. также этот вопрос, , для которого мой вопрос является предварительным.

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Стандарт C ++ устанавливает ряд правил для операций и их последствий для атомарных объектов ( [intro.races] ).Если все операции над объектом удовлетворяют этим правилам, то этот объект является атомарным.

фраза «атомарный объект» означает «объект атомарного типа», не так ли?

Это не сформулировано так в стандарте.Но поскольку эффект от операций определяется типом объекта, это не является необоснованным выводом.Также соответственно: атомарный тип - это тип, экземплярами которого являются атомарные объекты.

Стандартная библиотека C ++ предоставляет набор типов, которые гарантированно являются атомарными, а также функции для тех типов, которые гарантированно являются атомарными операциями.( [atomics] ).

должным образом выровненный объект, достаточно маленький, чтобы аппаратное обеспечение могло обрабатывать его атомарно.

Стандарт C ++ ничего не указывает о выравнивании или размереатомарных объектов.

Если объект / тип гарантированно является атомарным (см. [atomics] ), и если оборудование предъявляет такие требования к атомарности, то либо реализация языкадолжен гарантировать, что эти требования будут выполнены, или реализация должна использовать блокировки для обеспечения атомарности.

0 голосов
/ 26 февраля 2019

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

Да, когда стандарт C говорит об «атомном объекте», это означает объект с эффективным типомэто атомно-квалифицировано.Но также кажется, что это не записано явно, так что, вероятно, было бы неплохо добавить это.Я позабочусь об этом.

Кроме того, кроме некоторых заявленных людей, в C нет атомарных операций без атомных объектов.Это добровольно исправлено так, что атомарность доступа к этим объектам никогда не может быть нарушена.

0 голосов
/ 26 февраля 2019

На мой взгляд, атомарность - строго говоря - не относится к типам или объектам, она применяется к операциям , т.е. вы можете сказать, что операция является атомарной или нет.

By "атомарный объект «мы понимаем объект, открытый интерфейс которого предоставляет только атомарные операции, то есть все операции, которые вы можете делать с этим объектом, являются атомарными.

В C и C ++ может случиться так, что концепции определены иначе:сначала определите атомарные объекты, а затем определите атомарные операции в терминах атомных объектов.Вероятно, для C и C ++ имеет смысл определять его таким образом, потому что формулировка стандарта в первую очередь касается определения языка.Однако с точки зрения теоретической и абстрактной функциональности основной задачей являются атомарные операции.

C ++ имеет стандартный шаблон класса std::atomic<T>, который соответствует приведенным выше описаниям.

...