Bart Verzijlenberg
Download
Report
Transcript Bart Verzijlenberg
A Java Implementation of a LockFree Concurrent Priority Queue
Bart Verzijlenberg
November 15, 2007
Agenda
Algorithm Review
Implementation
Java Package used
Testing
Conclusion
Questions
November 15, 2007
1
Algorithm Review
Priority Queue
Lock-free
Relies on atomic Compare and Swap
operations
November 15, 2007
2
Algorithm Review
The algorithm uses the Skip-List data structure
Extends the Skip-List for concurrent use
The Skip-List is sorted on the priority of the nodes
The algorithm is lock-free
No blocking
Prevent dead locks
Always progress by at least one operation
Risk of starvation
November 15, 2007
3
Algorithm Review
Skip-List
Multi-layer linked list
Probabilistic alternative to balanced trees
H forward pointer for a node of height h
Each pointer i points to the next node with
a height of at least i
Probabilistic time complexity log(N) for N
nodes
November 15, 2007
4
Inserting in a Skip-List
Inserting 17 in the list
November 15, 2007
5
Implementation
Two classes
Node
Represents an entry in the queue
SkipQueue
Contains the algorithm logic
November 15, 2007
6
Node Class
November 15, 2007
7
SkipQueue Class
November 15, 2007
8
Java Package Used
AtomicMarkableReference
Stores
In Java.util.concurrent.atomic
A reference to an object
A boolean flag
Provides ability to
Atomically set both the flag and reference
Compare and Swap (CAS) the flag and reference
November 15, 2007
9
Testing
Multi-threaded
10 insert threads
Each inserting 100,000 objects with random
integer keys
10 delete threads
Each deleting while the queue is not empty
If the queue is empty, sleep for a bit and try again
November 15, 2007
10
Testing
Maintain a counter
Stores the number of nodes dequeued
When 1,000,000 nodes removed
Stop the delete threads
Check that
the queue is empty
removed exactly 1,000,000 nodes
November 15, 2007
11
Testing
10 insert threads
Each inserting 100,000 random integer
numbers
When all numbers have been inserted
Remove them one at a time.
Making sure the nodes come out sorted
November 15, 2007
12
Removing Atomicity
Do atomic references make a difference
Replace each AtomicMarkableReference with a
similar class
i.e. does concurrency come into play, or are we just
lucky
Same functions
But they are not atomic
The queue becomes locked after a small number
of concurrent deletes.
November 15, 2007
13
Conclusion
Further testing is needed to verify the
correctness of the implementation
Tests so far are positive
But cannot be certain there are no
problems
November 15, 2007
14
Questions
November 15, 2007