linux线程(二)内存释放

linux线程有两种模式joinable和unjoinable。

joinable线程:系统会保存线程资源(栈、ID、退出状态等)直到线程退出并且被其他线程join。

unjoinable线程:系统会在线程退出时自动回收线程资源。

linux线程创建后默认为joinable模式,因此线程退出时不会释放资源。若程序中大量的创建线程并未处理,则会导致内存泄漏,最终将导致不能继续创建线程。

应用举例:

1. 一般情况我们并不关注线程的状态,只是让其执行一些操作,所以要将线程设为unjoinable。实际编程时有三种方法,如下:

 1 //case 1:创建线程时设置为Detach,即unjoinable
 2 pthread_t tid;
 3 pthread_attr_t attr;
 4 pthread_attr_init(&attr);
 5 pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
 6 pthread_create(&tid, &attr, (void *)&thread_function, NULL);
 7
 8 //case 2:在线程中调用pthread_detach
 9 void thread_function(void *p)
10 {
11     pthread_detach(pthread_self());
12 }
13
14 //case 3: 在创建线程后调用pthread_detach
15 pthread_create(&tid, NULL, (void *)&thread_function, NULL);
16 pthread_detach(tid);

2. 当需要关注线程状态时,需要调用pthread_join。

1 pthread_create(&tid, NULL, (void *)&thread_function, NULL);
2 pthread_join(thread_id, NULL);
时间: 2024-12-25 14:24:21

linux线程(二)内存释放的相关文章

如何在linux下检测内存泄漏(转)

本文转自:http://www.ibm.com/developerworks/cn/linux/l-mleak/ 本文针对 linux 下的 C++ 程序的内存泄漏的检测方法及其实现进行探讨.其中包括 C++ 中的 new 和 delete 的基本原理,内存检测子系统的实现原理和具体方法,以及内存泄漏检测的高级话题.作为内存检测子系统实现的一部分,提供了一个具有更好的使用特性的互斥体(Mutex)类. 1.开发背景 在 windows 下使用 VC 编程时,我们通常需要 DEBUG 模式下运行程

Linux线程学习(二)

一.Linux进程与线程概述 进程与线程 为什么对于大多数合作性任务,多线程比多个独立的进程更优越呢?这是因为,线程共享相同的内存空间.不同的线程可以存取内存中的同一个变量.所以,程序中的所有线程都可以读或写声明过的全局变量.如果曾用fork() 编写过重要代码,就会认识到这个工具的重要性.为什么呢?虽然fork() 允许创建多个进程,但它还会带来以下通信问题:如何让多个进程相互通信,这里每个进程都有各自独立的内存空间.对这个问题没有一个简单的答案.虽然有许多不同种类的本地IPC (进程间通信)

linux内存释放

linux内存释放一.执行sync 命令强制吧内存中的数据刷到硬盘.二.执行 echo "1" > /proc/sys/vm/drop_caches  释放pagecache的内存三.可以关掉 echo "0" > /proc/sys/vm/drop_caches

Linux 进程与线程二

int pthread_join(pthread_t thr,void **thr_return); pthread_join函数用于挂起当前线程,直至th指定的线程终止为止. 如果另一个线程返回值不是NULL,则保存在thr_return地址中. 一个线程所使用的内存资源在应用pthread_join调用之前不会被重新分配,所以对于每个线程必须调用一次pthread_join函数(被分离线程除外). 其他线程不能对同意线程再应用pthread_join调用. pthread_join函数成功返

攻城狮在路上(叁)Linux(二十五)--- linux内存交换空间(swap)的构建

swap的功能是应付物理内存不足的状况,用硬盘来暂时放置内存中的信息. 对于一般主机,物理内存都差不多够用,所以也就不会用到swap,但是对于服务器而言,当遇到大量网络请求时或许就会用到. 当swap被使用的时候,主机的硬盘灯就会闪烁不停. 本篇介绍两种方式:1.设置一个swap分区   2.创建一个虚拟内存的文件. 一.使用物理分区构建swap: 1.首先是分区: A.fdisk /dev/sda; <== 根据后续提示创建一个分区. B.修改分区的ID,因为fdisk默认将分区的ID作为文件

谈谈Linux内存释放

上上周吧,一个朋友问我说他公司的服务器内存free 为0 是为什么,意思大概是内存去哪了,这引发了一个小小的讨论,也就是内存释放的问题… 首先我们可能会用free 去查看内存的使用率,它应该是这样的 [[email protected] ~]# free -m total used free shared buffers cached Mem: 32040 31707 332 0 498 27649 -/+ buffers/cache: 3559 28480 Swap: 16087 0 1608

Linux C编程之二十二 Linux线程池实现

一.线程池实现原理 1. 管理者线程 (1)计算线程不够用 创建线程 (2) 空闲线程太多 a. 销毁 更新要销毁的线程个数 通过条件变量完成的 b. 如果空闲太多,任务不够 线程阻塞在该条件变量上 c. 发送信号 pthread_cond_signal 2. 线程池中的线程 (1)从任务队列中取数据 任务队列任务 执行任务 (2)销毁空闲的线程 让线程执行pthread_exit 阻塞空闲的线程收到信号: 解除阻塞          只有一个往下执行          在执行任务之前做了销毁操

Linux 内存释放

简介 linux 内存释放通过如下命令,将cache与buff根据环境进行释放操作,避免重启释放内存. 操作 1.将内存中buff数据保存磁盘 sync 2.清理cache与buff缓存 echo 3 > /proc/sys/vm/drop_caches 原文地址:https://www.cnblogs.com/xiangsikai/p/12010160.html

[转载]Linux 线程实现机制分析

本文转自http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/ 支持原创.尊重原创,分享知识! 自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是如何看待和解决兼容性和效率这两个问题的. 一.基础知识:线程和进程 按照教科书上的定义,进