我有兴趣了解更多关于如何std::scoped_lock
运作的信息。
我正在通过在关键部分周围添加互斥锁来对一些线程不安全的代码进行一些修改。
我正在使用 astd::scoped_lock
来执行此操作。
到达代码行时,可能会发生两种情况std::scoped_lock lock(mutex)
:
互斥锁已成功锁定。这里没什么好担心的。
互斥锁由另一个线程 (A) 持有。互斥锁无法锁定,可能是当前线程(B)阻塞。
关于第2点,当能够锁定互斥锁的线程再次解锁它时会发生什么?即:当线程 A 解锁互斥锁(scoped_lock
超出范围)时,线程 B 会做什么?它会自动唤醒并再次尝试锁定互斥锁吗?(当线程 B 无法锁定互斥锁时,它会休眠吗?大概它不会while(1)
像占用 CPU 一样处于无限循环中。)
如您所见,我对 a 的scoped_lock
工作原理没有完全了解。有人能启发我吗?