Protokoli za preprečevanje mrtvih zank

Iz E-študij, proste zakladnice študentskega znanja

Skoči na: navigacija, iskanje

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

  1. T1 = zmnozi(x,y,z)
  2. T2 = zmnozi(y,z,x)
  3. 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
Osebna orodja
Imenski prostori
Različice
Dejanja
navigacija

Tiskanje/izvoz
orodja