В программировании в общем и в Golang в частности существуют проблемные ситуации при конкурентом выполнении задач. Рассмотрим основные из них: 1. Deadlock Ситуация, когда процесс переходит в состояние ожидания, поскольку другой ожидающий процесс удерживает требуемый ресурс. Пример из жизни: пара ведет романтический разговор по телефону, и когда наговорились, ни один из них не хочет вешать трубку первым: «Нет, ты повесь трубку первым!» - взаимозаблокировались =) В Go Deadlock будет, когда две или более горутин занимают ресурсы, которые другие горутины также пытаются занять, создавая бесконечное ожидание. Пример на Go Программа не сможет завершится, получим: fatal error: all goroutines are asleep — deadlock! Условия для появления deadlock. Условия Коффмана Чтобы предотвратить deadlock, необходимо нарушить хотя бы одно из условий, например, избегая циклического ожидания, устанавливая порядок захвата ресурсов. Для предотвращения deadlock из примера нужно лочить ресурсы в одинаковом пор
#6 Проблемы конкурентного программирования (deadlock, livelock, starvation)
1 ноября 20231 ноя 2023
842
2 мин