• Jason Rhinelander's avatar
    Use a C++14 std::shared_timed_mutex for locking · 7df75988
    Jason Rhinelander authored
    This significantly simplifies the member locking implementation since we
    no longer have to worry about tracking the number of active locks;
    instead read locks are shared locks and write locks are exclusive locks;
    the stl implementation can worry about the details beyond that.
    
    This also disallows recursive member locks; instead calling code has to
    manage itself to avoid double-locking a member.  Note also that
    switching a write lock to a read lock is no longer guaranteed to be
    non-blocking as there is no way to downgrade an exclusive lock to a
    shared lock.  boost::upgrade_mutex could allow this, but this importance
    of this is minor and it seems nicer to get rid of the boost dependency.
    
    It also changes the main Simulation run lock to be the same stl
    implementation; previously it was using the boost implementation.
    
    With that, the boost thread, date_time, and atomic library components
    are no longer required.
    7df75988