我一直在寻找一个c/c++进程在Linux中的最大互斥量是多少,但没有成功。还有,有没有办法修改这个数字。我正在读的这本书提到了如何找到Linux中允许的最大线程数,以及如何修改这个数目,但没有提到互斥。
发布于 2015-09-11 19:27:10
看看这个初始化。
为什么没有限制被定义 定义了最大互斥量和条件变量的符号,但被拒绝了,因为这些对象的数量可能会动态变化。此外,许多实现将这些对象放置到应用程序内存中;因此,没有显式的最大值。
编辑:在您询问的关于mutex可能具有的而不是内存的成本的评论中。嗯,我不知道,但我找到了一些有趣的材料:
互斥锁是如何工作的上的这篇文章谈到了这方面的成本:
成本 当涉及到互斥的成本时,有几个值得关注的问题。第一个,也是非常重要的一点,就是等待时间。您的线程应该只花一小部分时间等待互斥。如果他们等待得太频繁,那么您就失去了并发性。在最坏的情况下,许多线程总是试图锁定相同的互斥对象,其性能可能会比为所有请求服务的单个线程的性能差。这实际上并不是互斥本身的代价,而是并发编程的一个严重问题。 互斥的开销与测试和设置操作以及实现互斥的系统调用有关。测试和测试集的成本可能非常低;作为并发处理的关键,CPU有充分的理由使其高效。然而,我们忽略了另一个重要的指令:栅栏。这是用于所有高级互斥,并可能有一个更高的成本比测试和集操作。然而,甚至比这还要昂贵的是系统呼叫。您不仅承受了系统调用的上下文切换开销,内核现在在其调度代码上花费了一些时间。
所以,我猜,,他们在EAGAIN错误上谈论的成本,要么涉及CPU,要么涉及internal kernel structures。也许两者都有。也许是一些内核错误..。老实说我不知道。
StackOverflow资源
我选了一些你感兴趣的问答节目。读得好!
https://stackoverflow.com/questions/32530754
复制相似问题