Sobes.tech
Junior — Middle

როგორ შეიძლება თავიდან აიცილოთ ორი ნაკადის ურთიერთშეზღუდვა მრავალსხივიან პროგრამაში?

sobes.tech AI

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

მიმართმოყვარე ბლოკირება (deadlock) ხდება, როდესაც ორი ან მეტი ნაკადი სამუდამოდ ელოდება ერთმანეთისგან რესურსების გათავისუფლებას. Deadlock-ის თავიდან ასაცილებლად, შეიძლება გამოიყენოთ შემდეგი მიდგომები:

  • შეიმცირეთ შერწყმული ბლოკირებები: შეამცირეთ ერთდროულად მიღებული რესურსების რაოდენობა.
  • რესურსების მიღების წესის განსაზღვრა: ყოველთვის მიიღეთ რესურსები ერთსა და იმავე წესით ყველა ნაკადში.
  • Timeout-ების გამოყენება: როდესაც ცდილობთ ბლოკირების მიღებას, გამოიყენეთ timeout, რათა თავიდან აიცილოთ უსასრულო მოლოდინი.
  • მაღალი დონის სინქრონიზაციის პრიმიტივების გამოყენება: მაგალითად, Android-ის java.util.concurrent პაკეტიდან, რომლებიც ამცირებენ deadlock-ის ალბათობას.

რესურსების წესრიგიანი მიღების მაგალითი:

synchronized (resourceA) {
    synchronized (resourceB) {
        // რესურსებთან მუშაობა
    }
}

თუ ყველა ნაკადი მიჰყვება პირველ resourceA, შემდეგ resourceB წესს, deadlock არ მოხდება.