Middle
Gorutinlər bir-biri ilə necə əlaqə qura bilər? Go-da hansı sinxronizasiya üsulları mövcuddur?
sobes.tech Süni İntellekt
AI-dan cavab
Go'dakı goroutinlar bir-biri ilə kanallar (channels) vasitəsilə əlaqə qura bilər. Kanallar goroutinlar arasında dəyərləri ötürməyə imkan verir və onları sinxronlaşdırır, məlumat mübadiləsini təmin edir.
Go'da əsas sinxronizasiya üsulları:
- Kanallar (channels) — goroutinlar arasında təhlükəsiz məlumat ötürməyə imkan verir və avtomatik olaraq onları sinxronlaşdırır.
- Mutex (sync.Mutex) — paylaşılan resursların eyni vaxtda istifadəsini qarşısını almaq üçün istifadə olunur.
- WaitGroup (sync.WaitGroup) — goroutin qrupunun tamamlanmasını gözləməyə kömək edir.
- Cond (sync.Cond) — daha mürəkkəb sinxronizasiya üçün şərtli dəyişənlər.
Goroutinlar arasında əlaqə üçün kanal nümunəsi:
package main
import (
"fmt"
"time"
)
func worker(ch chan string) {
time.Sleep(time.Second)
ch <- "hazır"
}
func main() {
ch := make(chan string)
go worker(ch)
msg := <-ch
fmt.Println("Goroutine işi:", msg)
}