Является ли структура go map поточно-ориентированной?

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

2 ответа

Решение

Вы хотели бы использовать процедуры и синхронизировать доступ к вашим картам по каналам. Объяснение из FAQ:

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

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

Начиная с Go 1.9 лучше всего использовать тип sync.Map.

Другие вопросы по тегам