现在的位置: 首页 > 综合 > 正文

线程终结方式

2013年08月02日 ⁄ 综合 ⁄ 共 760字 ⁄ 字号 评论关闭

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 可以在一定程度上简化实现和设计。

抱歉!评论已关闭.