linux c 程序线程问题. (c linux 线程)

狄仁杰: 元芳楼上的晌毕回答你怎么看!,

元芳: 大人那不科学.

LZ,对于这种旁谨山问题我只能说你对linux的线程一点都不了解.

去百度看看什么运中叫做线程的分离状态(detached state)吧.

linux 系统中单个进程的更大线程数有其更大的限制 PTHREAD_THREADS_MAX

这个限制可以在 /usr/include/bits/local_lim.h 中查看。

对 linuxthreads 这个值一般是 1024,对于 nptl 则没有硬性的限制,仅仅受限于系统的资源

这个系统的资源主要就是线程的 stack 所占用的内存,用腔洞 ulimit -s 可以查看默认的线程栈大小,一般情况下,这个值是 8M。

可以写一段伍辩枯简单的代码验证最多可以创建多少个线程

int main() { int i = 0; pthread_t thread; while (1) { if (pthread_create(&thread, NULL, foo, NULL) != 0) return; i ++; printf(“i = %d\n”, i); } }

试验显示,在 linuxthreads 上最多可以创建 381 个线程,之后就会返回 EAGAIN

在 nptl 上最多可以创建 382 个线程,之后就会返回 ENOMEM

这个值和理论完全相符,因为 32 位 linux 下的进程用户空间是 3G 的大小,也就是 3072M,用 3072M 除以 8M 得 384,但是实际上代码段和数据段等还要占用一些空间,这个值应该向下取整到 383,再减去主线程,得到 382。

那为什么 linuxthreads 上还要少一个线程呢?这可太对了,因为 linuxthreads 还需要一个管理线程。

为了突破内存的限制,可以有两种方法

1) 用 ulimit -s 1024 减小默认的栈大小

2) 调用 pthread_create 的时候用 pthread_attr_getstacksize 设置一个较小的栈大小

要注意的是,灶棚即使这样的也无法突破 1024 个线程的硬限制,除非重新编译 C 库

创建线程是有上限的,你以为可以任意创建吗?

如果线程创建了桐好携枝很多,每个线程即使局隐铅很简单,想要马上完成任务退出也是一件困难的事情,在加上上下文切换,一定会导致创建太多线程错误的出现的。

何况你没有清理线程状态。

相关问题拓展阅读:

linux c 编写一个多线程。。。

大,而且要保证传输质量的话,自然是选择TCP来传输。

推荐API自然是socket,至于例子,

这只是一个改历弊很简单的例子,多进程并发TCP传输需要注意很多问题,不过,烂贺在程序运行后会慢慢凸显出来核族,慢慢改就是。

多线程程序的编写,是和操作系统和语言都有关系的。

1。首先,操作系统需要支持多线程,很久之前的古老的操作系统是不支持多任务多线程的。当然,当前的操作系统都是支持多线程的。但是,不同的操作系统具体如何支持的细节是不太一样的,也有效率之别。

2。语言方面,

2.1 C/C++在语言本身是不支持多线程开发的,但是能够进行API调用;同时现在有很多C++方面的库,通常也是跨平台的,比如Boost,OpenMP,MPI之类;

vc2023在2023年4月12号发布了,vc2023里面微软增加了一个并行开发的库。

2.2 C#和Java在语言本身层面上就支持多线程差明开发了。说得更直接一些,就是语言函数库里提供了封虚凯告装包,用起来很方便。

多线程开发,其实最关键的是操作系孙散统层面的运作机理。Windows和unix/linux上很多概念是相似的,但是有些细节方面是有所出入的。需要针对操作系统,学习内部机制。

开发库,开发语言都是相对次要的一个层面。可以选择你喜欢的语言。

因为操作系统底层API的不同,如果直接调用API开发,那肯定不会就有移植性的。但是现在有一些库(比如Boost)是可移植的,基于这些库就可以达到可移植。

用C/C++在Windows和Linux下面编写多线程程序,概念是相通的,具体细节是有一些差别的。但是你在windows上很有经验了之后,再在Linux上做,肯定很快就能搞定的。

1。首先,操作系统需要支持多线程,很久之前的古老的操作系统是不支持多任务多线程的。当然,当前的操作系统都是支持多线程的。但是,不同的操作系统具体如何支持的细节是不太一样的,也有效率之别。

2。语言方面,

2.1 C/C++在语言本身是不支持多线程开发的,但是能够进行API调用;同时现在有很多C++方面的库,通常也是跨平台的,比如Boost,OpenMP,MPI之类;

vc2023在2023年4月12号发布了,vc2023里面微软增如清加了一个并行开发的库。

2.2 C#和Java在语言本亮段身层面上就支持多线程开发了。说得更直接一些,就是语言函数库里提供了封装包,用起来很方便。

多线程开发,其实最关键的是操作系统层面的运作机理。Windows和unix/linux上很多概念是相似的,但是有些细节方面是有所出入的。需要针对操作系统,学习内部机制。

开发库,开发语言都是相对次要的一个层面。可以选择你喜欢的语言。

因为操作系统底层API的不同,如果直接调用API开发,那肯定不会就有移植性的渣键前。但是现在有一些库(比如Boost)是可移植的,基于这些库就可以达到可移植。

用C/C++在Windows和Linux下面编写多线程程序,概念是相通的,具体细节是有一些差别的。但是你在windows上很有经验了之后,再在Linux上做,肯定很快就能搞定的。

有几个函数

是linux的系统调用

fork()//用于新建进程

wait()/饥搏盯/用于等待子进程结束(这里好像用不上)

signal()//发送信号

pipe()//建立用于父子进程通信的匿银派名管道(应该也可以用这个实现同步)

不知道上面那些有没有帮助

不知道能不能把你写的传上来看看哪里烂和有问题

(~~~~不好意思 有点懒得自己写)

大,而且要保证传输质量的话,自然是选择TCP来传输。

推荐API自然是socket,至于例子,

这只是一个改历弊很简单的例子,多进程并发TCP传输需要注意很多问题,不过,烂贺在程序运行后会慢慢凸显出来核族,慢慢改就是。

c linux 线程的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c linux 线程,linux c 程序线程问题.,linux c 编写一个多线程。。。的信息别忘了在本站进行查找喔。


数据运维技术 » linux c 程序线程问题. (c linux 线程)