c/c++在Linux中允许的最大互斥数

c/c++ maximum number of mutexes allowed in Linux

本文关键字:c++ Linux      更新时间:2023-10-16

我一直在搜索,试图找出Linux中c/c++进程的最大互斥数,但没有成功。还有,有没有办法修改这个数字?我正在读的那本书提到了如何找到Linux中允许的最大线程数以及如何修改这个数字,但没有提到互斥锁。

检查这个pthread_mutex_init

为什么没有定义限制

考虑为互斥锁和条件变量的最大数量定义符号,但由于这些对象的数量可能动态变化而被拒绝。此外,许多实现将这些对象放入应用程序内存中;因此,不存在显式最大值。


编辑:在评论中,您询问了mutex可能具有而不是内存的成本。嗯,我不知道,但我发现了一些有趣的材料:

这篇关于互斥锁是如何工作的文章是这样说的:

成本当谈到互斥锁的开销时,有几个值得注意的地方。第一点,也是非常重要的一点,就是等待时间。线程应该只花一小部分时间等待互斥锁。如果它们等待得太频繁,那么就会失去并发性。在最坏的情况下,许多线程总是试图锁定同一个互斥锁,这可能导致性能比单个线程服务所有请求更差。这不是互斥锁本身的成本,而是并发编程的一个严重问题。 互斥锁的开销开销与测试和设置操作以及实现互斥锁的系统调用有关。测试和设置的成本可能非常低;作为并发处理的关键,cpu有充分的理由使其高效。我们忽略了另一个重要的指令:栅栏。这在所有高级互斥体中使用,并且可能比测试和设置操作具有更高的成本。然而,比这更昂贵的是系统调用。您不仅要承受系统调用的上下文切换开销,内核现在还要在调度代码上花费一些时间。

所以我猜测他们在EAGAIN错误上谈论的成本涉及CPUinternal kernel structures。也许两者兼而有之。可能是内核错误…我真的不知道。


StackOverflow资源

我选了一些你可能会感兴趣的问题。良好的阅读!

  • 锁一个未锁定的互斥锁的效率是多少?互斥锁的开销是多少?
  • pthread_mutex_lock如何实现
  • 互斥锁是如何工作的?
  • 何时应该使用互斥锁,何时应该使用信号量