Кто нибудь знает зачем std::mutex нужно разблокировать из того же потока, который заблокировал его.
Без этого требования можно было бы блокировать mutex из одного потока два раза, и разблокировать из другого. В этом случае можно было бы реализовать ожидание события на одном mutex (в конструкторе блокируем, в методе wait блокируемся повторно, а в notify разблокируем из другого потока). Но суть не в этом, а в том, что непонятна причина такого ограничения в posix и C++11, что unlock нужно вызывать из того же потока, что и lock.
P.S. futex в Linux, на основе которого реализованы mutex и условные переменные не имеет такого ограничения. Также не этого требования в Linux версии posix threads, но там явно прописано, что не нужно использовать такое поведение как фичу, ибо не кроссплатформенно да и может измениться в будущем.
P.P.S. Вопрос появился в результате вот этого курса: http://compsciclub.ru/courses/parallelprogramming2014