Есть ли в stl такой мьютекс, который можно разблокировать из другого потока?
Если тебе надо заблокировать один поток (или несколько, поставив их в очередь блокировки) до события в другом потоке, то тебе хорошо подойдет std::condition_variable.
На основе этой сущности можно реализовать механику "wait() -> notify/notifyall()" из pthread_monitor или из Java.
Вариант решения -- попросить поток, который заблокировал мьютекс, разблокировать его. Сделать это можно например с помощью флага, значение которого периодически проверяет первый поток.
Ну а так, желательно не иметь долгих блокировок. Блокировки стоит использовать только для обращения к общим данных.