Question: According to the following ticket lock implementation, fill out values for Turns and Tickets in the table AFTER each action finishes. int FAA(int *ptr) {
According to the following ticket lock implementation, fill out values for Turns and Tickets in the table AFTER each action finishes.
int FAA(int *ptr) {
int old = *ptr;
*ptr = old + 1;
return old;
}
typedef struct __lock_t {
int ticket;
int turn;
}
void lock_init(lock_t *lock) {
lock->ticket = 0;
lock->turn = 0;
} void acquire(lock_t *lock) {
int myturn = FAA(&lock->ticket);
while (lock->turn != myturn); // spin
}
void release (lock_t *lock) {
FAA(&lock->turn);
}
| actions | turns | tickets |
| A locks and runs | ||
| B locks | ||
| A unlocks | ||
| C locks | ||
| A locks | ||
| B runs | ||
| B unlocks | ||
| C runs | ||
| C unlocks | ||
| B locks |
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
