なぜ condition::wait は lock 済みの lock オブジェクトを要求するのか?

Boost.Thread のインタフェース設計に関して疑問があったので,関連する議論を探してみたら発見.
http://thread.gmane.org/gmane.comp.lib.boost.devel/75339/
boost::thread::condition::wait は渡される scoped_lock に対する事前条件として lock 済みであることを要求し, lock 済みでない場合例外を投げる設計なのだけれど,この設計が一体どういう rationale に基づいているのか,というのが自分の疑問.ちなみに,そもそも(lock 済みであるかどうかに関わらず) lock オブジェクトもしくは mutex オブジェクトを wait のインタフェースに渡さないといけない理由も微妙にしか理解してない.
っていうか,まだちゃんと読めてないので後でちゃんと読むのだ.