簡體   English   中英

在等待鎖定的互斥鎖時線程是否會睡眠?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM