Sobes.tech
Junior — Middle

Ինչպե՞ս կարելի է կանխել երկու հոսքերի փոխադարձ փակումը բազմահոսք ծրագրում։

sobes.tech AI

Պատասխան AI-ից

Միմյանց հետ փակագծում (deadlock) առաջանում է, երբ երկու կամ ավելի հոսքեր հավերժ սպասում են միմյանցից ռեսուրսների ազատ արձակմանը։ Deadlock-ները կանխելու համար կարող եք օգտագործել հետևյալ մոտեցումները:

  • Անցանկալի փակագծումներից խուսափել: նվազեցրեք միաժամանակ ձեռք բերվող ռեսուրսների քանակը:
  • Ռեսուրսների ձեռքբերման կարգը սահմանել: միշտ ձեռք բերեք ռեսուրսները նույն հերթականությամբ բոլոր հոսքերում:
  • Օգտագործել ժամանակային սահմանափակումներ (timeouts): փորձելիս ձեռք բերել փակագիծ, օգտագործեք timeout, որպեսզի խուսափեք անսահման սպասումից:
  • Օգտագործել բարձր մակարդակի սինխրոնիզացիայի primitives: օրինակ, Android-ում java.util.concurrent փաթեթից, որոնք նվազեցնում են deadlock-ի հավանականությունը:

Նմուշ՝ ռեսուրսների կարգավորված ձեռքբերում:

synchronized (resourceA) {
    synchronized (resourceB) {
        // ռեսուրսների հետ աշխատանք
    }
}

Եթե բոլոր հոսքերը հետևեն առաջին resourceA, ապա resourceB կարգին, deadlock չի լինի։