我一直在搜索并尝试找到Linux系统中C/C++进程的互斥锁最大数量,但没有成功。另外,是否有一种方法可以修改这个数字。我正在阅读的书提到了如何查找Linux中允许的线程的最大数量以及如何修改此数字,但没有提到互斥锁。
为什么没有定义限制
考虑到互斥锁和条件变量的最大数量可能会动态改变,因此拒绝了为互斥锁和条件变量的最大数量定义符号的想法。此外,许多实现将这些对象放入应用程序内存中;因此,不存在显式的最大值。
mutex
可能具有的费用。我不知道,但我找到了一些有趣的材料:
这篇关于互斥锁如何工作的文章对成本表示:
成本
当涉及到互斥锁的成本时,有几个要点需要注意。首先,非常重要的是等待时间。线程应该只花费少部分时间等待互斥锁。如果它们等待过于频繁,则会失去并发性。在最坏的情况下,许多线程始终尝试锁定相同的互斥锁可能导致性能比单个线程服务所有请求还要差。这实际上不是互斥锁本身的成本,而是并发编程的一个严重问题。
互斥锁的开销与测试和设置操作以及实现互斥锁的系统调用有关。测试和设置很可能是非常低的成本;作为并发处理的必需部分,CPU 有充分的理由使其高效。我们忽略了另一条重要指令:栅栏。这在所有高级互斥锁中使用,其成本可能比测试和设置操作更高。然而,比这更昂贵的是系统调用。您不仅会遭受系统调用的上下文切换开销,内核现在还会花费一些时间在其调度代码中。
所以我猜测他们在讨论 EAGAIN
错误成本时涉及到 CPU
或 内部内核结构
。也许两者都有,也许是一些内核错误...老实说我不知道。
我挑选了一些可能会对您感兴趣的 SO 问答。好好阅读吧!