被std::mutex::lock()
或条件变量阻塞的线程是否以某种方式释放内核以释放其他进程,还是我需要手动将这些线程置于睡眠状态?如果为true,是否std::mutex::try_lock()
允许一种无需休眠即可旋转线程的方法?
我问我的原因:我想让线程池中的三个线程处于未使用状态:旋转2毫秒,然后由互斥锁锁定250 ish毫秒(假设这使它们休眠并取消占用核心),最后被释放。
如果可以帮助,我想避免手动调用睡眠,因此很难调整睡眠时间。那么我可以安全地将其留给互斥吗?
那是特定于实现的;C ++标准不会直接与之对话。
实际上,互斥锁可以结合使用自旋锁定和完整睡眠。睡眠和唤醒相对昂贵,并且编译器可能会在线程进入睡眠状态之前编写锁定以旋转数毫秒。
但是,在主流电话,PC或大型设备上,没有C ++实现会无限期地自旋锁定。我可以想象某些嵌入式系统会这样做,但是我个人还没有遇到过。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句