等待锁定的互斥锁时线程会休眠吗?

安妮·奎因

std::mutex::lock()或条件变量阻塞的线程是否以某种方式释放内核以释放其他进程,还是我需要手动将这些线程置于睡眠状态?如果为true,是否std::mutex::try_lock()允许一种无需休眠即可旋转线程的方法?

我问我的原因:我想让线程池中的三个线程处于未使用状态:旋转2毫秒,然后由互斥锁锁定250 ish毫秒(假设这使它们休眠并取消占用核心),最后被释放。

如果可以帮助,我想避免手动调用睡眠,因此很难调整睡眠时间。那么我可以安全地将其留给互斥吗?

Yakk-亚当·内夫罗蒙特

那是特定于实现的;C ++标准不会直接与之对话。

实际上,互斥锁可以结合使用自旋锁定和完整睡眠。睡眠和唤醒相对昂贵,并且编译器可能会在线程进入睡眠状态之前编写锁定以旋转数毫秒。

但是,在主流电话,PC或大型设备上,没有C ++实现会无限期地自旋锁定。我可以想象某些嵌入式系统会这样做,但是我个人还没有遇到过。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

取消已锁定互斥锁的线程不会解锁互斥锁

多线程重新锁定互斥锁

pthread互斥锁(解锁)锁定不同的线程

线程的等待队列在POSIX pthread互斥锁锁定和解锁中位于何处?

如何允许某些线程在锁定互斥锁时具有优先级,请使用PTHREADS

等待互斥锁时进行处理

互斥锁-定时锁定

条件变量和互斥锁的线程池(大概)锁定问题

两个线程同时访问锁定的互斥锁

在同一线程中多次锁定互斥锁

强制解锁由其他线程锁定的互斥锁

C ++多线程互斥锁锁定分段错误

使用互斥锁时,多个线程可以通过单个ØMQ套接字发送消息吗?

如果线程正在等待互斥锁,是否捕获到信号?

在进程之间共享条件变量和互斥锁:互斥锁必须先锁定吗?

互斥锁指针可以在锁定状态期间改变吗?

锁定互斥锁时的Pthread优先级

多线程互斥锁可以使用几个互斥锁吗

使用数据进行互斥锁和等待时出现死锁

这个Go代码线程安全吗?还是需要互斥锁?

为什么我的互斥锁没有在其他线程将其锁定之前锁定?

互斥锁锁定/解锁命令

QMutex:销毁锁定的互斥锁

删除已锁定的互斥锁

是否有可能 2 个线程同时锁定一个互斥锁(使用互斥锁包装器)?

为什么Rust互斥锁似乎没有将锁锁定到想要最后锁定它的线程?

无条件等待互斥锁

为什么对condition_variable没有等待功能,不会重新锁定互斥锁

互斥锁。锁定并延迟互斥锁解锁顺序