Является ли структура go map потокобезопасной?
является ли тип карты Go потокобезопасным? У меня есть программа, которая имеет много goroutines чтения и записи на тип карты. Если мне нужно реализовать механизм защиты, каков наилучший способ сделать это?
2 ответов
вы хотите использовать goroutines и синхронизировать доступ к вашим картам через каналы. Объяснение от FAQ:
после долгого обсуждения было решено, что типичное использование карт не требуют безопасный доступ из нескольких потоков, и в этих случаях где это произошло, карта, вероятно, была частью какой-то более крупной структуры данных или вычисления, которые уже синхронизированы. Таким образом, требуя, чтобы все операции карты захватить мьютекс будет замедлить большинство программ и добавить безопасность для немногих. Однако это было нелегкое решение, поскольку оно означает неконтролируемый доступ к карте может привести к сбою программы.
язык не исключает обновления атомной карте. Когда требуется, такие как и при размещении ненадежной программы, реализация может блокировка доступа к карте.