c/c++在Linux中允许的最大互斥数
c/c++ maximum number of mutexes allowed in Linux
我一直在搜索,试图找出Linux中c/c++进程的最大互斥数,但没有成功。还有,有没有办法修改这个数字?我正在读的那本书提到了如何找到Linux中允许的最大线程数以及如何修改这个数字,但没有提到互斥锁。
检查这个pthread_mutex_init
为什么没有定义限制
考虑为互斥锁和条件变量的最大数量定义符号,但由于这些对象的数量可能动态变化而被拒绝。此外,许多实现将这些对象放入应用程序内存中;因此,不存在显式最大值。
编辑:在评论中,您询问了
mutex
可能具有而不是内存的成本。嗯,我不知道,但我发现了一些有趣的材料:
这篇关于互斥锁是如何工作的文章是这样说的:
成本当谈到互斥锁的开销时,有几个值得注意的地方。第一点,也是非常重要的一点,就是等待时间。线程应该只花一小部分时间等待互斥锁。如果它们等待得太频繁,那么就会失去并发性。在最坏的情况下,许多线程总是试图锁定同一个互斥锁,这可能导致性能比单个线程服务所有请求更差。这不是互斥锁本身的成本,而是并发编程的一个严重问题。 互斥锁的开销开销与测试和设置操作以及实现互斥锁的系统调用有关。测试和设置的成本可能非常低;作为并发处理的关键,cpu有充分的理由使其高效。我们忽略了另一个重要的指令:栅栏。这在所有高级互斥体中使用,并且可能比测试和设置操作具有更高的成本。然而,比这更昂贵的是系统调用。您不仅要承受系统调用的上下文切换开销,内核现在还要在调度代码上花费一些时间。
所以我猜测他们在EAGAIN
错误上谈论的成本涉及CPU
或internal kernel structures
。也许两者兼而有之。可能是内核错误…我真的不知道。
StackOverflow资源
我选了一些你可能会感兴趣的问题。良好的阅读!
- 锁一个未锁定的互斥锁的效率是多少?互斥锁的开销是多少?
- pthread_mutex_lock如何实现
- 互斥锁是如何工作的? 何时应该使用互斥锁,何时应该使用信号量
相关文章:
- 在C++/Linux中设置单调时钟的一些技巧
- Linux的Cpp上的计时器
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在Linux中哪里可以找到互斥、未来等的源代码
- 如何在linux终端中同时编译和运行c++代码
- 在Linux for Windows上编译C++代码时出错
- 如何找到锁定Linux futex的C++行
- 在linux上调试巨大的C++项目
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- c++方法参数只能在linux的发布模式下自行更改
- 在Linux和C++中的Windows上,散列字符串值会产生不同的输出
- 这里在 Linux 中具有"CreatePipe"和"CreateProcessW"功能吗?
- 函数在Windows或Linux上运行时表现不同
- 在Linux下捕获SIGKILL的C++程序
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- mysql C++ connector [mysql-connector-c++-8.0.19-linux-glibc2
- 这些是什么样的错误?即使我不在 Linux 上工作,我也遇到了 Linux 错误
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建