C++多线程操作,pthread_create()创建失败?解决:分析

在做毕设的时候遇到了一个多线程问题。
场景中需要传出一个数据用于显示。显示就是用上一篇文章《数码管 二位 2位共阳 显示两个不同的数字》中提到的2位共阳极数码管,由于显示数据是需要有一段时间的暂留,来达到用户观看舒适的效果。
用于数据显示的代码如下

 

 

暂未发现到有什么会影响到进程无法创建的问题。当该段代码运行结束时就会返回一个 0

实际使用了非常愚蠢的办法,手动调用了180+ 的线程。如果没有数错是 182,就无法继续创建线程了。

通过命令查看每个线程的占用的栈空间大小 ulimit -a

上面可以看到 stack size819200 bytes

PcDuino3B 的内存为 1GB

182 * 8 = 1456 明显已经把虚拟内存也占用了。

再也无法创建线程了,除非之前的进程有自己终止掉的。

网上给出了两个解决方案(原话复制)

方案一说了,可以真实创建更多的线程了。可这并不能在根本上解决问题。一旦达到这个临界点还是无法继续创建。

方案二说 使用pthread_attr_setstacksize 在程序中改变线程栈大小,这好像同上面方案一样,还是无法在根本上解决问题。

毕设是需要一个健壮的代码来自动终止线程达到效果。


还在研究中…… 2016年12月18日 22:27

搞定之后来更新。

2016年12月18日 22:45
使用线程测试

 

发现子线程只能进行到 379

这正好是上面的说的182的 两倍多一点(之前的182是因为我加了两个子线程 led 跟 温度)


多线程 非阻塞

 


多线程非阻塞

 

参考: linux下多线程的创建与等待详解

Leave a Reply

Your email address will not be published. Required fields are marked *