#826

Sukurkite užduočių eilę, kuri lygiagretina be kolizijų

Duomenų bazėje yra užduočių eilė — lentelė jobs su būsena pending neįvykdytoms eilutėms. Į ją vienu metu žiūri penki darbininkai: kiekvienas nori pagriebti seniausią užduotį ir pažymėti ją kaip «vykdoma». Paprastas eilutės užraktas rašymui su limitu priverčia visus penkis darbininkus atsitrenkti į tos pačios eilutės užraktą ir stovėti eilėje. Vaistas — praleisti jau užrakintas eilutes ir paimti kitą laisvą: kiekvienas darbininkas gauna savo užduotį, ir lygiagretumas veikia be kolizijų. Lentelėje jobs(id SERIAL, status, payload) yra keturios eilutės būsenoje pending (a, b, c, d). Paimkite iš jobs vieną pending užduotį su mažiausiu identifikatoriumi, perveskite ją į būseną running — likusios trys lieka pending.

Jūsų užklausos rezultatas bus rodomas čia