Junior — Middle
Оё ин массив бехатариро дар муҳити бисёрсоҳавӣ таъмин мекунад?
sobes.tech AI
Ҷавоб аз AI
Дар Го, қисмҳои оддӣ (масивҳо бо андозаи динамикӣ) аз хати бехатар нестанд. Агар чанд goroutine ҳамзамон дар як қисм хонда ва нависанд бе ҳамоҳангсозӣ, ин ба шароити рақобат ва рафтори номуайян оварда мерасонад.
Барои таъмини бехатарӣ дар муҳити бисёрсоҳавӣ бояд истифода бурда шаванд:
- Мутексиҳо (
sync.Mutex) барои бастани дастрасӣ ҳангоми тағир додани қисм. - Каналҳо (
chan) барои интиқоли маълумот байни goroutine-ҳо. - Сохторҳои махсуси маълумот аз бастаи
syncё китобхонаҳои беруна.
Масалан бо мутекс:
var mu sync.Mutex
var slice []int
func appendSafe(val int) {
mu.Lock()
defer mu.Unlock()
slice = append(slice, val)
}
Бе ин чораҳо, массив барои истифодаи ҳамзамон бехатар нест.