@lucifer-m
golang php js html css

Потокобезопасность. Можно обьект блокировки делать глобальным?

Допустим я создаю глобальную переменную
var maxDataLock sync.Mutex
теперь я могу её использовать
maxDataLock.Lock()
Event[name](ps)
maxDataLock.Unlock()

Так правильно делать блокировки или для каждой функции необходимо свою переменную делать?
  • Вопрос задан
  • 311 просмотров
Решения вопроса 1
Блокировки должны конкурировать там, где происходит гонка обращения к одним и тем же данным. Не нужно использовать для независимых операций одинаковую блокировку, это может привести к падению производительности. Есть другие нюансы, но это главное. Не забудьте прочитать про дедлок и атомарные операции, есть freelock еще. Надеюсь правильно понял вопрос.:-)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Gizmothron
Если это разные мьютексы, то они - разные блокировки дают.
Или сводить все к вызову одной общей функции (внутри которой и происходит блокировка).
Или, если код обрабатывающий заблокированные объекты, является сложным - использовать каналы.
Или, использовать lock-free алгоритмы с помощью package atomic. Прочитать про это можно в серии статей https://habrahabr.ru/post/196834
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы