170 похожих чатов

Извините, но ещё немного про атомики. я правильно понимаю, что

отсутствие гарантий сериализации доступа к переменной приведет к тому, что когда-то, теоретически, в данном коде сработает условие на 25 строке? https://goplay.space/#YOKs0MBPmYM Я запустил этот код локально, 50 тысяч горутин инкерементируют uint и проверяют значение, уже полчаса никаких сбоев. Значит, что тест неправильный или просто вероятность сбоя небольшая?

то есть всё, что мы можем сказать об атомиках - компилятор не сделает реордеринг и другие ядра не увидят промежуточных значений операции?

14 ответов

14 просмотров

Не означает не будет реордеринга. Просто к ячейке памяти будет эксклюзивный доступ при получении или зменении.

Vadim-Inshakov Автор вопроса
Vadim Inshakov
вы сейчас про мьютексы, кажется)

Мютекс позволяет эксклюзивно выполнять блок команд.

https://goplay.space/#dZKNQueqv7i Я чуть причесал ваш код. Условие никогда не сработает.

Внесите if atomic.LoadUint64(&ops) куда-нибудь сразу после atomic.AddUint64 и все заиграет новыми красками

Vadim-Inshakov Автор вопроса
Roman Timofeev
Внесите if atomic.LoadUint64(&ops) куда-нибудь сра...

нужно дождаться завершения работы всех рутин, раньше проверку вставлять нет смысла

Vadim-Inshakov Автор вопроса
Roman Timofeev
https://goplay.space/#dZKNQueqv7i Я чуть причесал...

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

Vadim Inshakov
мы просто выше обсуждали возможность грязных чтени...

Грязных чтений не будет. Но нет гарантий, что только что прочитанное значение актуальное.

Vadim-Inshakov Автор вопроса
Roman Timofeev
Грязных чтений не будет. Но нет гарантий, что толь...

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

Vadim Inshakov
мы просто выше обсуждали возможность грязных чтени...

более того, чтение начавшееся раньше может прочитать значение, записанное позже.

Vadim Inshakov
мы просто выше обсуждали возможность грязных чтени...

Я чёт не понял, когерентность кэшей же должна реализовываться процессором, вы пытаетесь поймать баг в цпу?

Vadim-Inshakov Автор вопроса
Aleksei Olshanskiy
Я чёт не понял, когерентность кэшей же должна реал...

я пытаюсь понять, почему сами разрабы го не гарантируют отсутствие таких багов при использовании атомиков

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта