【问题标题】:Does the use of locks in a thread slow down other threads that don't use locks?在线程中使用锁会减慢其他不使用锁的线程吗?
【发布时间】:2020-06-16 03:15:16
【问题描述】:

如果我有一个经常使用锁的线程,它是否会减慢其他不使用锁的线程(例如,由于 CPU 中的全局锁行为等)。

【问题讨论】:

  • 您是在说任何特定的编程语言吗?任何特定的操作系统?任何特定的库或工具链?
  • C++使用标准库,使用g++编译,在Linux上运行

标签: c++ linux multithreading gcc g++


【解决方案1】:

没有。锁只是由一个系统调用组成。在 C/C++ 中,无需担心解释器开销,无需“全局解释器锁”等等。

等待锁当然会减慢速度,您应该仔细规划应用程序的设计,以尽量减少线程请求锁并等待获得锁的机会。最糟糕的情况是,当您将应用程序划分为多个线程时,它们都必须等待某事并因此被有效地序列化。

【讨论】:

    【解决方案2】:

    当一个线程获取锁时,其他线程可以获取相同的锁,直到它被首先获取它的线程释放。当其他线程在等待锁被释放时,它们将进入空闲模式,这意味着它们将停止并等待锁被释放。这就是为什么在完成锁后立即释放锁是一种很好的做法。

    【讨论】:

    • 我相信您的意思是“无法获取”。
    • 我问的是不使用锁的线程的行为,而不是可能阻塞相关锁的线程。
    猜你喜欢
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多