[英]Do threads sleep when waiting on a locked mutex?
由std::mutex::lock()
或條件變量阻塞的線程是否以釋放其他進程的核心的方式休眠,或者我是否需要手動將這些線程置於休眠狀態? 如果是真的, std::mutex::try_lock()
允許一種在沒有睡眠的情況下旋轉線程的方法?
我問的原因是:我希望線程池中的線程有三種狀態未使用:旋轉2毫秒,然后由互斥鎖鎖定250毫秒(假設這讓他們睡覺並取消核心),最后被解除分配。
如果我可以幫助它,我想避免手動調用睡眠,調整睡眠持續時間會很困難。 那么我可以安全地將其留給互斥鎖嗎?
這是具體的實施; C ++標准沒有直接對它說話。
在實踐中,互斥鎖可以使用自旋鎖和完全睡眠的組合。 睡眠和喚醒是相對昂貴的,並且編譯器可以在將線程置於睡眠狀態之前將鎖寫入旋轉幾毫秒。
然而,在主要手機,PC或大型主機上沒有C ++實現無限期地旋轉鎖定。 我可以想象一些嵌入式系統這樣做,但沒有親自遇到過。
是。 這種被阻塞的線程會休眠並且不會占用任何CPU周期。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.