Junior — Middle
Proqramlaşdırma dilində dilimdən eyni vaxtda məlumat oxumaq mümkündürmü?
sobes.tech Süni İntellekt
AI-dan cavab
Go dilində, dilimlər (slices) yaddaşda yerləşən massivə işarə edən referans tipləridir. Bir dilimdən eyni vaxtda oxumaq təhlükəsizdir, əgər heç kim dilim və ya əsas massivinin məzmununu dəyişmirsə. Yəni, əgər bir neçə goroutine yalnız bir dilimdən məlumat oxuyursa və yazmırsa, bu, yarış şəraitinə səbəb olmur.
Lakin, ən azı bir goroutine dilimin elementlərini dəyişdirirsə və digər goroutine-lər eyni zamanda oxuyur və ya yazırsa, yarış şəraiti yaranır və davranış müəyyən deyil.
Təhlükəsiz eyni vaxtda oxuma nümunəsi:
slice := []int{1, 2, 3, 4, 5}
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
fmt.Println(slice[0])
}()
go func() {
defer wg.Done()
fmt.Println(slice[1])
}()
wg.Wait()
Əgər eyni zamanda oxumaq və yazmaq lazımdırsa, sinxronizasiya mexanizmlərindən (məsələn, mutex) və ya digər təhlükəsizlik mexanizmlərindən istifadə etmək lazımdır.