Approaches to Shared State in Concurrent Programs