Q. 32 Fetch_And_Add(X,i) is an atomic Read-Modify-Write instruction that reads
the value of memory location X, increments it by the value i , and returns the
old value of X. It is used in the pseudocode shown below to implement a busywait
lock. L is an unsigned integer shared variable initialized to 0. the value of 0
corresponds to lock being available, while any non-zero value corresponds to the
lock being not available.
AcquireLock(L){ while (Fetch_And_Add(L,1)) L = 1; } ReleaseLock(L){ L = 0; }
This implementation
(A) fails as L can overflow
(B) fails as L can take on a non-zero value when the lock is actually available
(C) works correctly but may starve some processes
(D) works correctly without starvation
Answer: (B)
Explanation: