【发布时间】:2020-06-16 03:15:16
【问题描述】:
如果我有一个经常使用锁的线程,它是否会减慢其他不使用锁的线程(例如,由于 CPU 中的全局锁行为等)。
【问题讨论】:
-
您是在说任何特定的编程语言吗?任何特定的操作系统?任何特定的库或工具链?
-
C++使用标准库,使用g++编译,在Linux上运行
标签: c++ linux multithreading gcc g++
如果我有一个经常使用锁的线程,它是否会减慢其他不使用锁的线程(例如,由于 CPU 中的全局锁行为等)。
【问题讨论】:
标签: c++ linux multithreading gcc g++
没有。锁只是由一个系统调用组成。在 C/C++ 中,无需担心解释器开销,无需“全局解释器锁”等等。
等待锁当然会减慢速度,您应该仔细规划应用程序的设计,以尽量减少线程请求锁并等待获得锁的机会。最糟糕的情况是,当您将应用程序划分为多个线程时,它们都必须等待某事并因此被有效地序列化。
【讨论】:
当一个线程获取锁时,其他线程可以获取相同的锁,直到它被首先获取它的线程释放。当其他线程在等待锁被释放时,它们将进入空闲模式,这意味着它们将停止并等待锁被释放。这就是为什么在完成锁后立即释放锁是一种很好的做法。
【讨论】: