Sobes.tech
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-терин туура колдонуу аркылуу жетишилет.