Skip to contentSkip to conversation

flock(fd, LOCK_UN) taking 500ms+ ?

DISCUSSION Manfred Spraul 1 participant 1 message Oct 2, 2002

lore
Share & tools
lore
#0 lore raw
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