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

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

2 ответов


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

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

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


с Go 1.9 лучший способ-это использовать синхронизации.Карта тип.