线程同步 - 进程的最大线程数

时间:2011-09-12 07:26:36

标签: synchronization pthreads

我正在尝试使用Linux系统上的pthreads进行线程同步的简单程序。我的程序源代码可以在http://pastebin.com/5EWS68NL找到。

该程序基本上必须按递增顺序将数字1打印到LIMIT(一个任意数字)。分配一个线程来打印每个数字,它等待它的条件变量发出信号,并打印出数字。

该程序正常工作,直到LIMIT = 380。更重要的是,该计划挂起。也就是说,我不认为pthread_create()会返回错误,因为我尝试打印错误编号,并且在发生错误时还包括fflush(stdout)。

可以在/ proc / sys / kernel / threads-max中指定系统的最大线程数。我确实试图将它增加到一个非常大的数字,但没有成功。如果线程数约为380,程序显然会挂起。

为什么会出现这种情况?这个值'380'在不同的系统中会有所不同吗?

谢谢和问候,
Hrishikesh Murali

1 个答案:

答案 0 :(得分:0)

我将LIMIT更改为50000并且由于缺少内存而出错,这是我预期的,大约32,000个线程之后。否则它工作正常。

我做了一点改变就停止了对pthread_create错误的执行。

    if ( ret_val )
    {
        printf("Couldn't create thread number %d - %s\n", iter, strerror(ret_val) );
        fflush(stdout);
        exit(1);
    }

由于您没有停止错误,您可能只是失败并开始打印数字 并没有看到您的错误消息?

无论如何,我认为错误将适用于您的机器。线程使用内存并且内存不是无限的,尽管380看起来有点低。也许机器上的线程堆栈大小设置得很高?

由于这是一个玩具程序,因此将其更改为在pthread_create错误输出后开始打印,然后循环返回并再次继续创建线程。你应该pthread_join你的线程或创建它们分离。

相关问题