Про мютексы в golang

Мьютекс в golang - это способ синхронизации доступа к общим ресурсам, которые могут быть одновременно использованы несколькими горутинами.

Мьютекс имеет два состояния:

  • Заблокирован

  • Разблокирован

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

Для работы с мьютексами в golang используется пакет sync, который предоставляет тип sync.Mutex. У мьютекса есть методы Lock() и Unlock(), которые позволяют блокировать и разблокировать доступ к общему ресурсу. Например, если у нас есть переменная counter, которая может быть изменена несколькими горутинами, то мы можем использовать мьютекс для защиты ее значения от гонки данных. Вот пример кода, который демонстрирует это:

package main

import (

"fmt"

"sync"

)

var counter int = 0 // общий ресурс

var mutex sync.Mutex // мьютекс

func main() {

ch := make(chan bool) // канал

for i := 1; i < 5; i++ {

go work(i, ch) // запускаем горутину

}

for i := 1; i < 5; i++ {

<-ch // ожидаем завершения горутины

}

fmt.Println("The End")

}

func work(number int, ch chan bool) {

mutex.Lock() // блокируем мьютекс

counter = 0 // сбрасываем значение счетчика

for k := 1; k <= 5; k++ {

counter++ // увеличиваем счетчик

fmt.Println("Goroutine", number, "-", counter) // выводим результат

}

mutex.Unlock() // разблокируем мьютекс

ch <- true // отправляем сигнал в канал

}

Этот код гарантирует, что только одна горутина имеет доступ к переменной counter в один момент времени, и выводит корректный результат.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Arduino & Pi

1.5K поста20.8K подписчика

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества