Thread

BasicLockable

Requirements

requires(L m)
{
        {m.lock()};
        {m.unlock()};
}

Lockable

digraph g {
           BasicLockable -> Lockable;
}

Requirements

requires(L m)
{
        {m.try_lock()} -> bool;
};

TimedLockable

digraph g {
           Lockable -> TimedLockable;
}

Requirements

//requires(L m)
//{
        //{m.try_lock_for()};
        //{m.try_lock_until()};
//};

Additional Notes

Requirements are not yet inforced because gcc cannot handle implicit template instantiations in requires expressions.

Mutex

digraph g {
           Lockable -> Mutex;
           DefaultConstructible -> Mutex;
           Destructible -> Mutex;
           "NOT CopyConstructible" -> Mutex;
           "NOT CopyAssignable" -> Mutex;
           "NOT MoveConstructible" -> Mutex;
           "NOT MoveAssignable" -> Mutex;
}

TimedMutex

digraph g {
           TimedLockable -> TimedMutex;
           Mutex -> TimedMutex;
}

SharedMutex

digraph g {
           Mutex -> SharedMutex;
}

Requirements

requires(M m)
{
        {m.lock_shared()};
        {m.try_lock_shared()};
        {m.unlock_shared()};
}

SharedTimedMutex

digraph g {
           TimedMutex -> SharedTimedMutex;
           SharedMutex -> SharedTimedMutex;
}

Requirements

//requires(M m)
//{
        //{m.try_lock_shared_for()};
        //{m.try_lock_shared_until()};
//};

Additional Notes

Requirements are not yet inforced because gcc cannot handle implicit template instantiations in requires expressions.