Linux应用软件编程-多任务处理(线程)

线程:轻量级的进程,线程的栈区独立(8M),与同一进程中的其他线程共用进程的堆区,数据区,文本区。

进程是操作系统资源分配的最小单位;线程是cpu任务调度的最小单位。

  1. 线程的创建:线程由所属的进程创建,进程为其分配独立的栈区空间,堆区,数据区,文本区与其他线程和所在进程共享。

  2. 线程调度:宏观并行, 微观串行。

  3. 线程的消亡:(1)线程退出,(2) 回收线程资源

进程与线程的区别:

正在执行的程序 ; 轻量级进程。线程一定属于进程。与同一进程中的其他线程共用进程的堆区,数据区,文本区

进程是操作系统资源分配的最小单位; 线程是cpu任务调度的最小单位。

资源消耗:进程消耗的资源空间大 线程:消耗的资源空间小,只需分配栈区空间

效率角度:创建线程比创建进程效率高,任务切换跨进程效率低于跨线程

安全角度:由于进程空间独立,所以安全性比线程高。

通信角度:进程间不能直接通信,需要使用进程间通信方式(IPC)实现;线程可以直接通信,比如:全局变量

创建线程:

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);

功能:创建一个线程

参数:

thread: 保存线程ID的变量地址

attr:线程属性 默认属性:NULL

void *(*start_routine) (void *) : 线程任务处理函数

arg:传递给任务处理函数的参数

返回值:成功:0;失败:非0

pthread_self():获取当前线程的id号

线程间通信:1). 全局变量;2). pthread_create传参的方式

  1. 线程退出及资源回收

(1)退出:

1)在线程任务中调用return;

2)在线程任务pthread_exit

(2)回收:

int pthread_join(pthread_t thread, void **retval);

功能:阻塞回收线程的资源, 状态

参数:

thread:需要回收的线程ID

retval:保存线程退出时的状态,比如return 返回的内容地址

返回值:成功:0

这里插一下在此能被返回的指针类型:

线程非分离属性:能被pthread_join回收或者能被其他线程结束的线程,称为具有非分离属性的线程。

线程分离属性:不需要回收,或者执行结束会被系统回收的线程,称为分离属性的线程。

直接设置分离属性使用:pthread_detach(pthread_t tid);

也可以这么设置:

  1. 定义一个线程属性对象:pthread_attr_t

  2. 初始化线程属性对象:pthread_attr_init();

  3. 设置线程的分离属性:pthread_attr_setdetachstate();

  4. 以分离属性创建线程:pthread_create();

  5. 销毁属性对象:pthread_attr_destroy();

相关推荐
思麟呀2 分钟前
C++11并发编程:条件变量
java·linux·jvm·c++·windows
树冰之辉7 分钟前
label-studio部署方式(linux版本)
linux
小此方8 分钟前
Re:Linux系统篇(二十七)进程篇·十二:从零构建属于你的自定义 Shell 解释器
linux·运维·服务器
落羽的落羽11 分钟前
【项目】JsonRpc框架——开发实现2(业务层)
linux·数据结构·c++·人工智能·算法·json·动态规划
Shadow(⊙o⊙)12 分钟前
mkfifo()命名管道-FIFO客户端 服务端模拟。*System V消息队列、信号量(信号灯)。
linux·运维·服务器·开发语言·c++
daad77714 分钟前
继续记录SITL的大循环
linux
Shadow(⊙o⊙)25 分钟前
System V共享内存详解,shm系列接口,三种共享内存删除机制。System V通信缺点分析
linux·运维·服务器·开发语言·网络·c++
喵喵爱自由32 分钟前
ubuntu离线扩展磁盘分区
linux·运维·ubuntu
落羽的落羽37 分钟前
【项目】JsonRpc框架——功能测试、项目总结
linux·服务器·开发语言·c++·qt·算法·机器学习
RisunJan38 分钟前
Linux命令-openssl(强大的安全套接字层密码库)
linux·运维·服务器