2011-09-12 136 views
0

我正在尝试一个关于在linux系统上使用pthreads的线程同步的简单程序。我的程序的来源可以在http://pastebin.com/5EWS68NL找到。线程同步 - 一个进程的最大线程数

程序本质上必须按升序打印数字1以LIMIT(任意数字)。分配一个线程来打印每个数字,等待它的条件变量被发信号,并打印数字。

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

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

任何想法,为什么这可能是这种情况?这个值'380'在不同的系统中会有所不同吗?

感谢和问候,
Hrishikesh穆拉利

回答

0

我改限为50000,并出现了错误的内存不足,这是我所期待的,约32000名线程之后。否则,它工作正常。

我做了这个小小的更改,以停止执行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您的线程或创建它们分离。

+0

哦,好的。我会尝试并回来。 :-) –