VGrabko
@VGrabko
Golang, Php, Js

Как работает блокировка?

Если у меня 1000 рутин которые пытаются прочитать/записать данные в мап и для блокировок я юзаю sync. Выходит что 1 рутина читает/пишет, а другие ожидают? Гарантируется ли очередь выполнения рутин (к примеру веб сервер хранит онлайн и рутины запущены в разное время то они же должны выполнится в том порядке в котором были заданы). Верно?
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
@Gizmothron
То что вы используете sync ничего не говорит - будьте конкретнее, в sync много функций/объектов.

Очередность, возможно, что совпадет, но совсем не гарантируется, если вы ее сами не организуете в явном виде.

Да, все блокированы и ждут, пока одна читает/пишет, если вы используете sync.Mutex.

Вообще при чтении блокировать не нужно. Используйте специальный sync.RWMutex.

Блокировать нужно на очень малое количество операций.

Если операций много/сложные, то используйте не sync, а каналы.

Еще можете прочитать использовать lock-free алгоритмы, для этого вам понадобится пакет atomic.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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