Junior — Middle
როგორ შეიძლება თავიდან აიცილოთ ორი ნაკადის ურთიერთშეზღუდვა მრავალსხივიან პროგრამაში?
sobes.tech AI
პასუხი AI-სგან
მიმართმოყვარე ბლოკირება (deadlock) ხდება, როდესაც ორი ან მეტი ნაკადი სამუდამოდ ელოდება ერთმანეთისგან რესურსების გათავისუფლებას. Deadlock-ის თავიდან ასაცილებლად, შეიძლება გამოიყენოთ შემდეგი მიდგომები:
- შეიმცირეთ შერწყმული ბლოკირებები: შეამცირეთ ერთდროულად მიღებული რესურსების რაოდენობა.
- რესურსების მიღების წესის განსაზღვრა: ყოველთვის მიიღეთ რესურსები ერთსა და იმავე წესით ყველა ნაკადში.
- Timeout-ების გამოყენება: როდესაც ცდილობთ ბლოკირების მიღებას, გამოიყენეთ timeout, რათა თავიდან აიცილოთ უსასრულო მოლოდინი.
- მაღალი დონის სინქრონიზაციის პრიმიტივების გამოყენება: მაგალითად, Android-ის
java.util.concurrentპაკეტიდან, რომლებიც ამცირებენ deadlock-ის ალბათობას.
რესურსების წესრიგიანი მიღების მაგალითი:
synchronized (resourceA) {
synchronized (resourceB) {
// რესურსებთან მუშაობა
}
}
თუ ყველა ნაკადი მიჰყვება პირველ resourceA, შემდეგ resourceB წესს, deadlock არ მოხდება.