std::lock_guard可以被中断吗?

Can std::lock_guard be interupted?

本文关键字:中断 lock guard std      更新时间:2023-10-16

如果我在lock_guard下有一些代码,比如:

std::thread t([&]()
{
    std::lock_guard<std::mutex> lock(m);
    // some simple operations
});

我是否保证"某些操作"永远不会在t线程正在运行的这个核心cpu上中断?lock_guard之后可以有上下文切换吗?

会有上下文切换,但可以保证所有其他线程都将被锁在后面。

不,受互斥锁保护的临界区不会以实时优先级运行,除非您显式地请求它这样做,这是使用标准c++库无法完成的。内核仍然可以调度另一个没有等待互斥锁的线程(在同一个进程中,或者其他进程中)。设置实时优先级只能通过特定于操作系统的系统调用完成。