线程终结方式

1.线程的创建有上限吗,如果没有,这个程序为什么会只创建了382个线程就结束了。
    LinuxThreads将每个进程的线程最大数目定义为1024,但实际上这个数值还受到整个系统的总进程数限制,这又是由于线程其实是核心进程。
    在kernel 2.4.x中,采用一套全新的总进程数计算方法,使得总进程数基本上仅受限于物理内存的大小,计算公式在kernel/fork.c的fork_init()函数中:
    max_threads = mempages / (THREAD_SIZE/PAGE_SIZE) / 8

2.当线程结束时(不调用pthread_join)会不会将所有资源释放。
一般来说,调用下面三个函数会保证资源释放:
void pthread_exit(void *retval) 
int pthread_join(pthread_t th, void **thread_return)
int pthread_detach(pthread_t th)

也看到网上有人说一般情况下,进程中各个线程的运行都是相互独立的,线程的终止并不会通知,也不会影响其他线程,终止的线程所占用的资源也并不会随着线程的终止而得到释放。

所以还是调用pthread_exit或pthread_join,或者设置为detached属性比较好.

3.如果我同时运行多个线程,如何管理它?
线程池是一种,简单点也可以设计一个专门的清理线程来pthread_join已挂起的线程.

总结:

我是在说对 joinable thread 和 detached thread 之间进行选择的原则。如果需要对一个线程退出的状态进行同步,就必须使用joinable thread;否则,使用 detached thread 可以在一定程度上简化实现和设计。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值