прям такая строгость, например для использования просто как флаг.
Итак го даёт возможность писать в переменную из горутин, но даёт при это хоть где нибудь гарантии thread-safity?
happens before?
Про happens before задавал этот вопрос 3 дня назад, никто так и не ответил, но уже разобрался =) Так вот, про map написали конкретно что нельзя, но про другие типы под вопросом. Есть какие то гарантии в стандарте, описании?
Простой ответ на это - юзайте -race флаг, это включит рейс детектор и он уже кинет ворнинги. Конкурентная запись + чтение/запись любой переменной = гонка данных, даже если эта переменная скрыта в исходниках го. Конкурентное чтение - не гонка.
Про чтение - были причудливые платформы. Моё любимое: The short version is that Alpha requires memory barriers for readers as well as updaters of linked data structures. Yes, this does mean that Alpha can in effect fetch the data pointed to before it fetches the pointer itself, strange but true.
Я не совсем про барьеры памяти. Например на c++ собираешь ты данные из внешней системы и кладёшь в строку и отдельный поток иногда запрашивает значение строки. Строки через указатели поэтому просто создаёшь новый буфер с ново строкой и меняешь указатель. Тут не важна гонка памяти. Даже если команда записи в память уже выполнена но оно реально туда не поместилось, там будет предыдущее значение что тоже устроит. +- пару тактов, по сети это всё равно получено с задержкой. И мьютексы и прочие синхронизации тут лишние.
в том то и дело, что попортит
Обсуждают сегодня