[openstack-dev] [oslo][concurrency] lockutils lock fairness / starvation

Chris Friesen chris.friesen at windriver.com
Tue May 16 14:42:38 UTC 2017


On 05/15/2017 03:42 PM, Clint Byrum wrote:

> In order to implement fairness you'll need every lock request to happen
> in a FIFO queue. This is often implemented with a mutex-protected queue
> of condition variables. Since the mutex for the queue is only held while
> you append to the queue, you will always get the items from the queue
> in the order they were written to it.
>
> So you have lockers add themselves to the queue and wait on their
> condition variable, and then a thread running all the time that reads
> the queue and acts on each condition to make sure only one thread is
> activated at a time (or that one thread can just always do all the work
> if the arguments are simple enough to put in a queue).

Do you even need the extra thread?  The implementations I've seen for a ticket 
lock (in C at least) usually have the unlock routine wake up the next pending 
locker.

Chris



More information about the OpenStack-dev mailing list