Вот какой фон:
Мне нужна переменная счетчика, разделяемая между режимами go, используемая для чего-то вроде просачивающегося ведра. Я знаю, что есть пример просачивающегося потока в Effective Go, параллельный раздел, но число, которое мне нужно отслеживать, может быть очень большим, и я считаю неэффективным использовать количество элементов в канале для его отслеживания. Поэтому я рассматриваю возможность использования общей переменной между различными процедурами для отслеживания числа.
Я понимаю, что без явной конфигурации все подпрограммы go отображаются в один поток. Но если я назначаю более одного потока для программы на многоядерном компьютере, атомы приращения атома? Все ли одинаково для разных типов данных (int32
, float32
и т.д.) На разных машинах (x86_32
, x86_64
, arm
)?
Чтобы быть более конкретным, что, если у меня есть counter += 1000
в одной подпрограмме и counter -= 512
в другой процедуре, и две подпрограммы работают в двух потоках? Нужно ли беспокоиться о потокобезопасности? Должен ли я надеть блокировки на counter
?