Assume that a system has multiple processing cores. For each of the following scenarios, describe which is a better locking mechanism—a spinlock or a mutex lock where waiting processes sleep while waiting for the lock to become available:

• The lock is to be held for a short duration.

• The lock is to be held for a long duration.

• A thread may be put to sleep while holding the lock

A multithreaded web server wishes to keep track of the number of requests it services (known as hits). Consider the two following strategies to prevent a race condition on the variable hits . The first strategy is to use a basic mutex lock when updating hits :

int hits;

mutex lock hit lock;

hit lock.acquire();

hits++;

hit lock.release();

A second strategy is to use an atomic integer:

atomic t hits;

atomic inc(&hits);

Explain which of these two strategies is more efficient.