are not safe for concurrent use: it’s not defined what happens when you read and write to them simultaneously.
Т.е. я не могу из разных горутин работать с переменной типа map. А с какими ещё типами нельзя работать одноременно из разных горутин?
Могу задавать значение переменной с типом строка? С типом slice?
а мьютексы для чего..
Ни с чем без должной синхронизации работать небезопасно, если не сказано обратного
С мьютексами всё понятно. Пытаюсь выяснить когда можно обойтись без них.
Без них - это либо атомики, либо разный lock-free на тех же самых атомиках.
Ну как-то поподробней бы. Вот например в С подобных языках я могу легко писать в тип int из разных потоков, программа не упадёт. Понятно что это частные случаи.
То, что вы можете это делать, не делает это безопасным)
Нет, не можете. Будет UB
Ну в int тоже можно из разных горутин писать. Другой вопрос, что вы так значение потеряете
А в каком япе мапа потокобезопасная
Предполагаю что в пайтоне на основе догадки выше
https://pkg.go.dev/sync#Map
Не упадёт, только вот корректно работать не будет. Операции с целыми числами по умолчанию в си неатомарны. Для тред-сейфных интов есть атомик тайп специфаерс
Про атомарность я так понимаю тут из-за барьеров памяти. Число не может быть прочитано или записано на половину. Неможет быть что считано 4 бита из 8ми
Но когда мы говорим про те же строки, там 2 поля. Вполне может быть что 1 поле записано но не записано другое. И операции со строкой в этот момент непредсказуемы. Наверное
Строки нельзя менять безопасным образом. Любое изменение строки по умолчанию непредсказуемо
Обсуждают сегодня