Junior — Middle
შესაძლებელია თუ არა ერთ ფუნქციაში ერთდროულად რამდენიმე ბლოკირების მექანიზმის (Mutex) გამოყენება?
sobes.tech AI
პასუხი AI-სგან
დიახ, Go ენის ფარგლებში შესაძლებელია ერთ ფუნქციაში ერთდროულად რამდენიმე mutex-ის (Mutex) გამოყენება. ეს ხშირად ხდება მაშინ, როდესაც საჭიროა სხვადასხვა რესურსის ან მონაცემთა ნაწილების დაცვა, რომლებიც ერთმანეთთან დაკავშირებული არ არის. მთავარი მიზანია თავიდან აიცილოთ взаимდამოკიდებული ბლოკირებები (deadlock), როდესაც ერთი mutex ელოდება მეორის გათავისუფლებას, ხოლო მეორე — პირველის.
მრავალ mutex-ის გამოყენების მაგალითი:
var mu1 sync.Mutex
var mu2 sync.Mutex
func updateResources() {
mu1.Lock()
defer mu1.Unlock()
// პირველი რესურსის მუშაობა
mu2.Lock()
defer mu2.Unlock()
// მეორე რესურსის მუშაობა
}
Deadlock-ების თავიდან ასაცილებლად, რეკომენდირებულია mutex-ების გაკეტვა ყოველთვის ერთსა და იმავე წესით კოდის ყველა ადგილას.