問題:
]為了確保高效率的線程協調,std::condition_variables發揮關鍵作用。然而,在呼叫notify_one()之前取得鎖的必要性存在不確定性:它是強制性的,還是可選的做法?
解開謎團:
答案很明確:在呼叫notify_one()之前並沒有強制要求持有鎖。然而,在某些情況下,取得鎖是一種好的做法。讓我們深入研究一下這背後的原因。
為什麼要鎖?
範例:兩個通知的故事
提供的範例提出了有關不一致鎖定的問題後續notify_one() 所調用的行為。初始呼叫沒有鎖的原因是後面的等待操作:等待函數將自動取得和釋放鎖,確保被通知的執行緒可以繼續執行。然而,後續的notify_one()呼叫會受到鎖的保護,因為它們不涉及等待操作。
總而言之,在呼叫notify_one()之前持有鎖定並不是普遍要求,但這是建議的做法某些場景。它可以減輕潛在的效能問題並確保資料完整性。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3