Implements a simple semaphore that can be used to coordinate access to shared data from multiple concurrent hosts