Protokoli za preprečevanje mrtvih zank
Iz E-študij, proste zakladnice študentskega znanja
If a transaction Ti requests a lock and transaction Tj holds a conflicting lock, the lock manager can use one of the following two policies:
Vsebina |
Čakaj ali izdihni (Wait-Die)
Wait-die: If Ti has higher priority, it is allowed to wait; otherwise it is aborted.
Če je Ti transakcija starejša ima pravico čakati; drugače mora izdihniti.
Rani ali čakaj (Wound-wait)
Wound-wait: If Ti has higher priority, abort Tj; otherwise Ti waits.
Če je Ti starejša transakcija, potem prekine mlajšo (Tj), drugače Ti čaka.
primer naloge
Dan je naslednji program:
zmnozi (x,y,z) read(X,x) read(Y,y) read(Z,z) x=x*y*z write(X,x) commit
izvedi naslednje tri transakcije
- T1 = zmnozi(x,y,z)
- T2 = zmnozi(y,z,x)
- T3 = zmnozi(z,x,y)
rešitev
T1 T2 T3 --+---------------+----------------+---------------+ 1|zmnozi(x,y,z) | | | 2| |zmnozi(y,z,x) | | 3| | |zmnozi(z,x,y) | +---------------+----------------+---------------+ 4|writelock(X) | | | 5| |writelock(Y) | | 6| | |writelock(Z) | +---------------+----------------+---------------+ 7|read(X,x) | | | 8| |read(Y,x) | | 9| | |read(Z,x) | +---------------+----------------+---------------+ 10|writelock(Y)* | | | * die(T2) 11| |zmnozi(y,z,x) | | 12| | |writelock(X)** | ** wait(T3) +---------------+----------------+---------------+ 13|read(Y,y) | | | 14| |writelock(Y)*** | | *** wait(T2) +---------------+----------------+---------------+ 15|writelock(Z)**** | **** die(T3) +------------------------------------------------+ 16| | |zmnozi(z,x,y) | 17|read(Z,z) | | | 18| | |writelock(Z)*5 | *5 wait(T3) 19+---------------+----------------+---------------+ 20|x=x*y*z | | 21|write(X,x) | | 22|commit | | +---------------+----------------+---------------+ 23| |read(Y,x) | | 24| | |read(Z,x) | | +----------------+---------------+ 25| |writelock(Z) *6 | | *6 die(T3) 26| | |zmnozi(z,x,y) | +---------------+----------------+---------------+ 27| |read(Z,y) | | 28| | |writelock(Z) *7| *7 wait(T3) +---------------+----------------+---------------+ 29| |writelock(X) | | 30| |read(X,z) | | 31| |x=x*y*z | | 32| |write(Z,x) | | 33| |commit | | +---------------+----------------+---------------+ 34| | |read(Z,x) | 35| | | ........ | <- do konca