Sobes.tech
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)
}