Pull to refresh

Comments 10

Статья о правильных вещах, но, на мой взгляд, слишком все усложнено:

Если вы скомпилируете и выполните эту программу, то можете получить примерно следующий результат:

Дальше идет результат, который мы бы хотели получить, т.е. сначала выполнился первый поток, потом второй. И дальше идет пространное и непонятное обычному человеку объяснение того, что если бы чисел было тыща, то мы бы получили смесь бульдога с носорогом. А фишка в том, что даже если бы там было два числа, мы могли бы получить эту смесь.

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

Самая сложная часть в атомарных операциях - это std::memory_order . Вот про него бы хоть пару слов сказали. К сожалению, то что написано в статье можно за 5 минут объяснить первому встречному, но это не приблизит его к реальному пониманию проблем, связанных с атомарностью.

А ещё про барьеры, например, что можно сделать ring buffer без блокировки, как io_uring.

Хуже перевода сложно найти.

Атомарные, блять, операции, в С++ не являются атомарными. Вы хоть забейте в гугл транслейт что такое

::IS_ALWAYS_LOCK_FREE, как вы это перевели "могут быть не атомарными" неизвестно

Поясните, что вы имеете в виду. Где в оригинале или переводе утверждается, что атомарные операции не являются атомарными"?

Типы

В C++ в шаблонный класс std::atomic<> можно обертывать и многие другие типы, что способствует атомарным операциям над соответствующим типом. Этот шаблон ни в коем случае не гарантирует, что все операции на самом деле получатся атомарными

В первой строке

В оригинале то же самое: The template by no means guarantees any operations will actually be atomic though. И следующая фраза объясняет, в каком случае это может произойти: если аппаратной поддержки не хватает, то идёт откат на mutex, и операции хотя и остаются thread-safe, но уже не atomic.

Это проблема не перевода, а оригинала. Автор оригинала явно использует atomic как синоним lock-free, и это достаточно популярное толкование.

Sign up to leave a comment.