The files in this directory all demonstrate a queue that can be accessed
concurrently without data corruption. Each file contains the definition of the
queue, along with a different main function highlighting a specific feature of
the queue. These examples are implemented in a language called Simple, but
because the search is based on the semantics of the language itself, we could in
theory write and verify the program in any language for which we have defined
semantics.

By running these programs with the --search option we can see all possible 
behaviors, which works towards verifying the behavior of the queue. For example,
when searching the state space of the multiple_readers.simple and
multiple_writers.simple we see that certain execution paths result in data
corruption, however we see no data corruption in one_put_one_get.simple.
This verifies that although we can allow concurrent access, there can only be at
most one reader and one writer.

One unverified feature of this queue is that readers can utilize busy-waiting,
by looping continuously until queueGet(...) returns 1. Right now, this causes
search to be infinite because of local variables in loops. Additionally, we
have not been able to verify larger programs such as four_put_four_get.simple
due to memory and time constraints of searching such a large state space.
