flock(fd, LOCK_UN) taking 500ms+ ?
Quoted 4 lines · akpm
It's not really clear why that yield is in there at all? Unless that code is really, really slow (milliseconds) then probably it should just be deleted.
It looks like a very simple starvation control:
thread 1:
for(;;) {
F_LOCK
<do a few seconds work>
F_UNLCK
}
thread 2:
F_LOCK.If there is no yield after unlock, thread 2 might never receive the lock.
Is it possible to figure out if someone is waiting on the lock? F_UNLCK should schedule, if there is a waiter with higher priority.
--
Manfred