chien-hua shann, ting-lu huang and cheng chen national chiao tung university
DESCRIPTION
Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University. IMPLEMENTATION OF A NON-BLOCKING QUEUE ALGORITHM. Nastaran Shafiei. 1. Outline. Algorithm Description Class Diagram Algorithm Implementation Results. 2. Finite array, Q Counters, FRONT and REAR - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University](https://reader035.vdocument.in/reader035/viewer/2022081603/5681448f550346895db12af9/html5/thumbnails/1.jpg)
11
Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University
Nastaran Shafiei
IMPLEMENTATION OF A NON-BLOCKING QUEUE ALGORITHM
![Page 2: Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University](https://reader035.vdocument.in/reader035/viewer/2022081603/5681448f550346895db12af9/html5/thumbnails/2.jpg)
22
Algorithm Description Class Diagram Algorithm Implementation Results
Outline
![Page 3: Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University](https://reader035.vdocument.in/reader035/viewer/2022081603/5681448f550346895db12af9/html5/thumbnails/3.jpg)
33
Finite array, Q Counters, FRONT and REAR Operations: enqueue, dequeue Elements of the queue
The Algorithm
![Page 4: Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University](https://reader035.vdocument.in/reader035/viewer/2022081603/5681448f550346895db12af9/html5/thumbnails/4.jpg)
4
NonblockingQueue
L: int Queue: AtomicLongArray REAR: AtomicLong FRONT: AtomicLong
Enqueue
val: int Enqueue(int value) void run()
Dequeue
void run()
Thread
…
…
getValPart(long item)getRefPart(long item) getQueueItem(int val, int ref)main(String[] args)
![Page 5: Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University](https://reader035.vdocument.in/reader035/viewer/2022081603/5681448f550346895db12af9/html5/thumbnails/5.jpg)
55
Shared Variablespublic static AtomicLongArray Queue;public static AtomicLong RAER;public static AtomicLong FRONT;
Atomic variables java.util.concurrent.atomic get() and set() Extend the concept of volatile variables compareAndSet()
![Page 6: Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University](https://reader035.vdocument.in/reader035/viewer/2022081603/5681448f550346895db12af9/html5/thumbnails/6.jpg)
6
Implementation of Array ElementsAn Array Element:
getCounter(long element) ;
val ref ref ref<< >>
int ref int val
32 bits
64 bits
32 bits
![Page 7: Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University](https://reader035.vdocument.in/reader035/viewer/2022081603/5681448f550346895db12af9/html5/thumbnails/7.jpg)
7
Implementation of Array Elements getQueueValue(long element)
getQueueEntryType(int val, int ref)
val ref val>>
val ref<< + val = val ref
![Page 8: Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University](https://reader035.vdocument.in/reader035/viewer/2022081603/5681448f550346895db12af9/html5/thumbnails/8.jpg)
88
1. Make private copies using get(): rear = REAR.get(); front = FRONT.get(); x = Queue.get ((int)rear % L);
2. Check conditions: rear == REAR.get()
rear != FRONT.get() + L
Implementation of Enqueue.run()
![Page 9: Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University](https://reader035.vdocument.in/reader035/viewer/2022081603/5681448f550346895db12af9/html5/thumbnails/9.jpg)
99
3. Check the content of the array element: Empty - Attempt to store an item and increment
REAR using CAS
if (Queue.compareAndSet((int) (rear % L) , x , newValue ))
REAR.compareAndSet( rear , rear+1);
Full - Help the other process
if( getQueueValue(Queue.get((int)rear % L)) != 0)
REAR.compareAndSet( rear , rear+1);
Implementation of Enqueue.run()
![Page 10: Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University](https://reader035.vdocument.in/reader035/viewer/2022081603/5681448f550346895db12af9/html5/thumbnails/10.jpg)
1010
![Page 11: Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University](https://reader035.vdocument.in/reader035/viewer/2022081603/5681448f550346895db12af9/html5/thumbnails/11.jpg)
11
Algorithm Behaviours
Point contentionNumber of simultaneously active processes
Number of threads: 2Number of total operations: 200
11
Thread1
# op: 100
Thread2
# op: 100
![Page 12: Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University](https://reader035.vdocument.in/reader035/viewer/2022081603/5681448f550346895db12af9/html5/thumbnails/12.jpg)
12
Algorithm Behaviours
Point contentionNumber of simultaneously active processes
Number of threads: 4Number of total operations: 200
12
Thread1
# op: 50
Thread3
# op: 50
Thread2
# op: 50
Thread4
# op: 50
![Page 13: Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University](https://reader035.vdocument.in/reader035/viewer/2022081603/5681448f550346895db12af9/html5/thumbnails/13.jpg)
13
Algorithm Behaviours
Point contentionNumber of simultaneously active processes
Number of threads: 8Number of total operations: 200
13
Thread1
# op: 25
Thread3
# op: 25
Thread2
# op: 25
Thread4
# op: 25
Thread5
# op: 25
Thread7
# op: 25
Thread6
# op: 25
Thread8
# op: 25
![Page 14: Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University](https://reader035.vdocument.in/reader035/viewer/2022081603/5681448f550346895db12af9/html5/thumbnails/14.jpg)
1414
![Page 15: Chien-Hua Shann, Ting-Lu Huang and Cheng Chen National Chiao Tung University](https://reader035.vdocument.in/reader035/viewer/2022081603/5681448f550346895db12af9/html5/thumbnails/15.jpg)
1515
Questions?