Sobes.tech
Junior

რა უზრუნველყოფს Go-ში თხელი უსაფრთხოებას (thread safety)?

sobes.tech AI

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

Go-ში თანმიმდევრული უსაფრთხოება რამდენიმე მექანიზმით არის უზრუნველყოფილი:

  • Goroutines — მსუბუქი ნაკადები, რომლებიც საშუალებას აძლევენ კოდის პარალელურად შესრულებას.
  • კანალები — ძირითადი ინსტრუმენტი მონაცემების უსაფრთხო გაცვლისთვის goroutine-ებს შორის, გარეშე საერთო ცვლადების გამოყენების.
  • sync პაკეტი — შეიცავს სინქრონიზაციის primitives-ებს, როგორიცაა Mutex კრიტიკული სექციების დასაკეტად, RWMutex წაკითხვასა და დაწერაზე დაშლილი ბლოკირებისათვის და WaitGroup ჯგუფის goroutine-ების დასრულების მოსალოდნელობისთვის.

მაგალითი — საერთო რესურსის დაცვის mutex-ის გამოყენებით:

import (
    "sync"
)

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}

ამ გზით, Go-ში თანმიმდევრული უსაფრთხოება მიღწეულია goroutine-ების, კანალებისა და sync პაკეტის primitives-ების სწორად გამოყენებით.