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

2024-04-21

我一直在尝试找出 Linux 中 c/c++ 进程的最大互斥体数量是多少,但没有成功。另外,有没有办法修改这个数字。我正在读的书提到了如何找到Linux中允许的最大线程数以及如何修改这个数字,但没有提到互斥体。


检查这个pthread_mutex_init http://linux.die.net/man/3/pthread_mutex_init.

为什么没有定义限制

考虑过为互斥体和条件变量的最大数量定义符号,但被拒绝,因为这些对象的数量可能会动态变化。此外,许多实现将这些对象放入应用程序内存中;因此,没有明确的最大值。


EDIT: In the comments you asked about the costs a mutex may have other than memory. Well, I don't know, but I found some interesting material about that:

这篇文章关于互斥体如何工作 http://mortoray.com/2011/12/16/how-does-a-mutex-work-what-does-it-cost/关于成本是这样说的:

花费

当谈到互斥体的成本时,有几个有趣的点。第一个也是非常重要的一点是等待时间。您的线程应该只花费一小部分时间来等待互斥体。如果他们等待得太频繁,那么你就会失去并发性。在最坏的情况下,许多线程总是尝试锁定相同的互斥体可能会导致性能比服务所有请求的单个线程更差。这实际上不是互斥锁本身的成本,而是并发编程的一个严重问题。

互斥体的开销成本与测试和设置操作以及实现互斥体的系统调用有关。测试和设置的成本可能非常低; CPU 对于并发处理至关重要,因此有充分的理由提高其效率。然而,我们忽略了另一个重要的指令:栅栏。这在所有高级互斥体中使用,并且可能比测试和设置操作具有更高的成本。然而,比这更昂贵的是系统调用。您不仅要承受系统调用的上下文切换开销,而且内核现在还要在其调度代码中花费一些时间。

So I'm guessing他们谈论的成本EAGAIN错误涉及CPU or internal kernel structures。也许两者都有。也许是一些内核错误......我真的不知道。


StackOverflow 资源

我挑选了一些您可能感兴趣的问答。好读!

  • 锁定未锁定的互斥体的效率如何?互斥体的成本是多少? https://stackoverflow.com/a/3652428/1928852
  • pthread_mutex_lock是如何实现的 https://stackoverflow.com/questions/5095781/how-pthread-mutex-lock-is-implemented
  • 互斥锁到底是如何工作的? https://stackoverflow.com/questions/11770571/how-do-mutexes-really-work
  • 什么时候应该使用互斥锁,什么时候应该使用信号量 https://stackoverflow.com/questions/4039899/when-should-we-use-mutex-and-when-should-we-use-semaphore
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 中允许的 c/c++ 最大互斥体数量 的相关文章

随机推荐