Computer Science

 

Consider how to implement a mutex lock using an atomic hardware instruction. Assume that the following structure defining the mutex lock is available:

typedef struct {

int available;

} lock;

 

(available == 0) indicates that the lock is available, and a value of 1 indicates that the lock is unavailable. Using this struct, illustrate how the following functions can be implemented using the test and set()

and compare and swap() instructions:

• void acquire(lock *mutex)

• void release(lock *mutex)

Be sure to include any initialization that may be necessary

 

do {

while (true) {

flag[i] = want in;

j = turn;

while (j != i) {

if (flag[j] != idle) {

j = turn;

else

j = (j + 1) % n;

}

flag[i] = in cs;

j = 0;

while ( (j

j++;

if ( (j >= n) && (turn == i || flag[turn] == idle))

break;

}

/* critical section */

j = (turn + 1) % n;

while (flag[j] == idle)

j = (j + 1) % n;

turn = j;

flag[i] = idle;

/* remainder section */

} while (true);

Figure 5.22 The structure of process Pi in Eisenberg and McGuire’s algorithm.