Junior
Go'до кайсы нерсе жиптердин коопсуздугун камсыздайт (thread safety)?
sobes.tech AI
AIден жооп
Go-да көптүк коопсуздугун камсыз кылуу бир нече механизмдер аркылуу ишке ашырылат:
- Goroutine — жеңил салмактуу жиптер, алар кодду параллелдүү иштетүүгө мүмкүндүк берет.
- Каналдар — goroutine-лар арасында маалыматтарды коопсуз алмашуу үчүн негизги инструмент, жалпы өзгөрмөлөрдү колдонбостон.
- sync пакети — критикалык бөлүмдөрдү жабуу үчүн
Mutex, окуу жана жазуу үчүн бөлүнгөнRWMutex, жана goroutine-лар тобунун аяктоосун күтүү үчүнWaitGroupсыяктуу синхрондоштуруу primitives-терин камтыйт.
Мисал — жалпы ресурсты коргоо үчүн mutex колдонуу:
import (
"sync"
)
var mu sync.Mutex
var эсептегич int
func көбөйтүү() {
mu.Lock()
defer mu.Unlock()
эсептегич++
}
Ошентип, Go-да көптүк коопсуздугу goroutine-лар, каналдар жана sync пакети primitives-терин туура колдонуу аркылуу жетишилет.