TY - GEN
T1 - A history of BlockingQueues
AU - Zaharieva-Stojanovski, Marina
AU - Huisman, Marieke
AU - Blom, Stefan
N1 - 10.4204/EPTCS.94.4
PY - 2012/9/19
Y1 - 2012/9/19
N2 - This paper describes a way to formally specify the behaviour of concurrent data structures. When
specifying concurrent data structures, the main challenge is to make specifications stable, i.e., to
ensure that they cannot be invalidated by other threads. To this end, we propose to use history-based
specifications: instead of describing method behaviour in terms of the object’s state, we specify it in
terms of the object’s state history. A history is defined as a list of state updates, which at all points
can be related to the actual object’s state.
We illustrate the approach on the BlockingQueue hierarchy from the java.util.concurrent
library. We show how the behaviour of the interface BlockingQueue is specified, leaving a few
decisions open to descendant classes. The classes implementing the interface correctly inherit the
specifications. As a specification language, we use a combination of JML and permission-based
separation logic, including abstract predicates. This results in an abstract, modular and natural way
to specify the behaviour of concurrent queues. The specifications can be used to derive high-level
properties about queues, for example to show that the order of elements is preserved. Moreover, the
approach can be easily adapted to other concurrent data structures.
AB - This paper describes a way to formally specify the behaviour of concurrent data structures. When
specifying concurrent data structures, the main challenge is to make specifications stable, i.e., to
ensure that they cannot be invalidated by other threads. To this end, we propose to use history-based
specifications: instead of describing method behaviour in terms of the object’s state, we specify it in
terms of the object’s state history. A history is defined as a list of state updates, which at all points
can be related to the actual object’s state.
We illustrate the approach on the BlockingQueue hierarchy from the java.util.concurrent
library. We show how the behaviour of the interface BlockingQueue is specified, leaving a few
decisions open to descendant classes. The classes implementing the interface correctly inherit the
specifications. As a specification language, we use a combination of JML and permission-based
separation logic, including abstract predicates. This results in an abstract, modular and natural way
to specify the behaviour of concurrent queues. The specifications can be used to derive high-level
properties about queues, for example to show that the order of elements is preserved. Moreover, the
approach can be easily adapted to other concurrent data structures.
KW - CR-D.2.4
U2 - 10.4204/EPTCS.94.4
DO - 10.4204/EPTCS.94.4
M3 - Conference contribution
T3 - Electronic Proceedings in Theoretical Computer Science
SP - 31
EP - 35
BT - Proceedings Sixth Workshop on Formal Languages and Analysis of Contract-Oriented Software (FLACOS 2012)
A2 - Pace, Gordon J.
A2 - Ravn, Anders P.
PB - EPTCS
CY - London
T2 - Sixth Workshop on Formal Languages and Analysis of Contract-Oriented Software, FLACOS 2012
Y2 - 19 September 2012 through 19 September 2012
ER -