之前爲什麼必須獲取監視器如果一個線程在它當前沒有擁有的鎖定對象上調用Monitor.Wait(lockObj)
,則會拋出一個SyncronizationLockException
。在調用Monitor.Wait()
我不明白這一點嗎?如果線程擁有該鎖,並因此可以成功呼叫Monitor.Wait()
,那麼它就會立即釋放鎖。爲什麼線程不能等待它目前不擁有的鎖?
更新
我已經決定要詳細說明一下添加到我的問題。
從我的理解等待只是將當前線程放在顯示器等待隊列並釋放鎖。稍後,脈衝或脈衝都會將等待隊列上的一個或所有線程移至就緒隊列。只要監視器被釋放,就緒隊列中的下一個(如果有的話)線程就會被鎖定。
那麼,爲什麼不能等待簡單地將線程添加到等待隊列?爲什麼它需要獲得鎖來做到這一點?這是否有物理上的原因,或者微軟設計這個類迫使你以正確的方式使用它?
現在我想到了它,我猜想把一些東西放在顯示器的等待隊列中,或者將某些東西移動到就緒隊列中真的是在操縱顯示器。這是有道理的,你需要自己的監視器來做到這一點。這是想想它的正確方法嗎?
因爲我的大腦多線程很難!