Задать вопрос
@lucifer-m
golang php js html css

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

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

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

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

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