当前位置: 首页 > news >正文

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传参的方式

2. 线程退出及资源回收
   (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();


http://www.mrgr.cn/news/81719.html

相关文章:

  • webpack介绍使用
  • Ramfs, rootfs 和 initramfs
  • uniapp 文本转语音
  • 怎么把webp格式转换成jpg?可以推荐的格式转换方法
  • Lua元表
  • wangEditor富文本插件在vue项目中使用和媒体上传的实现
  • 119.【C语言】数据结构之快速排序(调用库函数)
  • 工厂+策略模式之最佳实践(疾病报卡维护模块API设计)
  • Java编程规约
  • C++线程、并发、并行
  • 【Leetcode 热题 100】46. 全排列
  • 雷电模拟器安装LSPosed
  • 强化学习基础之贝尔曼期望方程
  • -0.4375 IEEE754表示
  • Python+Django 技术实现自动化漏洞扫描系统开发
  • 【Rust自学】7.2. 路径(Path)Pt.1:相对路径、绝对路径与pub关键字
  • Python数据可视化小项目
  • 麒麟操作系统服务架构保姆级教程(六)部署PHP环境
  • Prometheus 专栏 —— Prometheus入门介绍
  • 影视仓最新接口+内置本包方法的研究(2024.12.27)
  • MacOS安装Xcode(非App Store)
  • STM32F103RCT6学习之二:GPIO开发
  • 使用 IDE生成 Java Doc
  • 使用 Three.js 创建圣诞树场景
  • Linux 搭建 nginx+keepalived (主备+双主模式) 高可用 | Nginx反向代理
  • Layui 新增销售单 其中一种 编写逻辑和打开方式