gpt4 book ai didi

c - pthread_create 因 EAGAIN 而失败

转载 作者:IT王子 更新时间:2023-10-29 00:59:29 26 4
gpt4 key购买 nike

在这里考虑这个代码片段,我试图在其中创建一堆线程,这些线程最终处理模拟竞争条件的给定任务。

const int thread_count = 128;
pthread_t threads[thread_count];

for (int n = 0; n != thread_count; ++n)
{
ret = pthread_create(&threads[n], 0, test_thread_fun, &test_thread_args);
if( ret != 0 )
{
fprintf( stdout, "Fail %d %d", ret, errno );
exit(0);
}
}

除了偶尔 pthread_create 失败并出现 errno EAGAIN“资源暂时不可用”之外,一切正常,我尝试诱导 usleep,然后重试创建,但没有实际效果。

故障是零星的,在一些盒子上没有故障,而在一些盒子上经常发生。

知道这里可能出了什么问题吗?

Edit - 1

更新最大线程数

cat /proc/sys/kernel/threads-max
256467

Edit 2

我认为这里的输入让我思考,我可能会执行以下操作并发布任何值得分享的结果。

  1. 将堆栈大小设置为最小值,我不认为 thread_function 使用任何大数组。
  2. 增加我的内存和交换(并消除任何副作用)
  3. 编写一个脚本来监控系统行为,并查看在这种情况下运行时是否有任何其他进程/系统守护进程在干扰,这反过来会导致资源紧缩。
  4. 系统硬限制和软限制都非常高,所以我现在将保留它们。

最佳答案

如果您的程序确保它永远不会创建超过系统限制允许的线程(通过在创建新线程之前加入线程),那么您很可能会遇到这个内核错误:

对于某些类型的容器技术,竞争窗口似乎更大,并且更容易触发错误。 (这可能取决于所使用的 cgroup 类型。)

关于c - pthread_create 因 EAGAIN 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47078106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com