Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms

Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms

1996 | Maged M. Michael, Michael L. Scott
The paper presents two new concurrent FIFO queue algorithms: a non-blocking algorithm and a two-lock algorithm. Both algorithms are designed to be simple, fast, and practical. The non-blocking algorithm ensures that operations will complete within a finite number of time steps, even in the presence of process delays, making it suitable for multiprogrammed systems. The two-lock algorithm allows one enqueue and one dequeue to proceed concurrently, making it suitable for machines with non-universal atomic primitives like test_and_set. The authors conducted experiments on a 12-node SGI Challenge multiprocessor to evaluate the performance of these algorithms. The results show that the non-blocking queue consistently outperforms the best known alternatives, especially in multiprogrammed systems. The two-lock algorithm outperforms a single lock when multiple processes compete for access, making it a good choice for busy queues on machines with non-universal atomic primitives. The paper also discusses the correctness of the algorithms, including safety, linearizability, and liveness properties. The non-blocking algorithm is proven to be non-blocking, while the two-lock algorithm is livelock-free. The performance experiments demonstrate the benefits of these algorithms in various scenarios, including dedicated and multiprogrammed systems. In conclusion, the non-blocking queue is recommended for any queue-based application on multiprocessors with universal atomic primitives, while the two-lock queue is suitable for heavily utilized queues on machines with simpler atomic primitives. The work contributes to the broader effort of evaluating trade-offs among different mechanisms for atomic updates in common data structures.The paper presents two new concurrent FIFO queue algorithms: a non-blocking algorithm and a two-lock algorithm. Both algorithms are designed to be simple, fast, and practical. The non-blocking algorithm ensures that operations will complete within a finite number of time steps, even in the presence of process delays, making it suitable for multiprogrammed systems. The two-lock algorithm allows one enqueue and one dequeue to proceed concurrently, making it suitable for machines with non-universal atomic primitives like test_and_set. The authors conducted experiments on a 12-node SGI Challenge multiprocessor to evaluate the performance of these algorithms. The results show that the non-blocking queue consistently outperforms the best known alternatives, especially in multiprogrammed systems. The two-lock algorithm outperforms a single lock when multiple processes compete for access, making it a good choice for busy queues on machines with non-universal atomic primitives. The paper also discusses the correctness of the algorithms, including safety, linearizability, and liveness properties. The non-blocking algorithm is proven to be non-blocking, while the two-lock algorithm is livelock-free. The performance experiments demonstrate the benefits of these algorithms in various scenarios, including dedicated and multiprogrammed systems. In conclusion, the non-blocking queue is recommended for any queue-based application on multiprocessors with universal atomic primitives, while the two-lock queue is suitable for heavily utilized queues on machines with simpler atomic primitives. The work contributes to the broader effort of evaluating trade-offs among different mechanisms for atomic updates in common data structures.
Reach us at info@study.space
Understanding Simple%2C fast%2C and practical non-blocking and blocking concurrent queue algorithms