Sobes.tech
Junior — Middle

თქვენ გამოიყენეთ სინქრონიზაციის მექანიზმი sync.WaitGroup-ის გამოყენებით თქვენს პროექტებში?

sobes.tech AI

პასუხი AI-სგან

დიახ, Go პროექტებში ხშირად გამოიყენება sync.WaitGroup გორუტინების სინქრონიზაციისთვის. ეს მექანიზმი საშუალებას აძლევს დაელოდოს პარალელური დავალებების ჯგუფის დასრულებას წინადადების გაგრძელებამდე.

მუშაობის პრინციპი:

  • შეიქმნება WaitGroup ობიექტი.
  • თითოეული გორუტინის დაწყებამდე გამოიძახება Add(1), რათა გაიზარდოს გამოთვლითი სია.
  • გორუტინის შიგნით, სამუშაოს დასრულების შემდეგ, გამოიძახება Done(), რაც ამცირებს გამოთვლით სიის მნიშვნელობას.
  • მთავარი გორუტინა გამოიძახებს Wait(), რომელიც ბლოკავს, სანამ გამოთვლითი სია არ გახდება ნული.

მაგალითი:

var wg sync.WaitGroup

wg.Add(2) // ველით 2 გორუტინას

go func() {
    defer wg.Done()
    // პირველი გორუტინის სამუშაო
}()

go func() {
    defer wg.Done()
    // მეორე გორუტინის სამუშაო
}()

wg.Wait() // ველით ორივეს დასრულებას

ეს სასარგებლოა პარალელური ოპერაციების კოორდინაციისთვის და პროგრამის ადრე დასრულების თავიდან ასაცილებლად.