【APUE】网络socket编程温度采集智能存储与上报项目技术------多线程编程

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习
擅长领域:驱动开发,嵌入式软件开发,BSP开发
作者主页:一个平凡而乐于分享的小比特的个人主页
文章收录专栏:网络socket编程之温度采集智能存储与上报项目,本专栏为网络socket编程之温度采集智能存储与上报项目技术简介,实现流程分析
项目源码:https://gitee.com/TJF865975/project1_ds18b20,README部分包含项目功能及实现,欢迎大家Watch、Star、Fork。
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

1.多线程基础知识

线程是进程的一条执行路径,线程在Unix系统下,通常被称为轻量级的进程。所有的线程都是在同一进程空间运行,这也意味着多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。一个进程可以有很多线程,每条线程并行执行不同的任务。
在这里插入图片描述
一个进程创建后,会首先生成一个缺省的线程,通常称这个线程为主线程(或称控制线程)。主线程就是通过main函数进入的线程,由主线程调用pthread_create()创建的线程称为子线程。
主线程和子线程的默认关系是:无论子线程执行完毕与否,一旦主线程执行完毕退出,所有子线程执行都会终止。
主线程和子线程通常定义以下两种关系:
可会合:这种关系下,主线程需要明确执行等待操作,在子线程结束后,主线程的等待操作执行完毕,子线 程和主线程会合,这时主线程继续执行等待操作之后的下一步操作。主线程必须会合可会合的子线程。在主线程的线程函 数内部调用子线程对象的wait函数实现,即使子线程能够在主线程之前执行完毕,进入终止态,也必须执行会合操作,否 则,系统永远不会主动销毁线程,分配给该线程的系统资源也永远不会释放。
相分离:表示子线程无需和主线程会合,也就是相分离的,这种情况下,子线程一旦进入终止状态,这种 方式常用在线程数较多的情况下,有时让主线程逐个等待子线程结束,或者让主线程安排每个子线程结束的等待顺序,是 很困难或不可能的,所以在并发子线程较多的情况下,这种方式也会经常使用。
线程的分离状态决定一个线程以什么样的方式来终止自己,在默认的情况下,线程是非分离状态的,这种情况下,原有的线程 等待创建的线程结束,只有当pthread_join()函数返回时,创建的线程才算终止,释放自己占用的系统资源,而分离线程没有被其他的线程所等待,自己运行结束了,线程也就终止了,马上释放系统资源。

2.实现函数

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

typedef struct 
{       
	int 				detachstate;   //线程的分离状态       
	int                             schedpolicy;   //线程调度策略       
	struct sched_param              schedparam;    //线程的调度参数      
	int                             inheritsched;  //线程的继承性       
	int                             scope;         //线程的作用域      
	size_t                          guardsize;     //线程栈末尾的警戒缓冲区大小       
	int                             stackaddr_set;       
	void *                          stackaddr;     //线程栈的位置       
	size_t                          stacksize;     //线程栈的大小
}pthread_attr_t;                           		

3. 多进程改写服务器程序

多线程编程模型和多进程编程模型的工作方式完全一致,在了解Linux下多线程编程之后,我们就可以使用多线程编程模型改写服务器的多线程实现,其流程图如下:
在这里插入图片描述

相关推荐

  1. 线socket编程

    2024-04-06 20:50:02       35 阅读
  2. Python线编程

    2024-04-06 20:50:02       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-06 20:50:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-06 20:50:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-06 20:50:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-06 20:50:02       20 阅读

热门阅读

  1. Swagger介绍与knife4j框架

    2024-04-06 20:50:02       12 阅读
  2. c++算法学习笔记 (19) 堆

    2024-04-06 20:50:02       16 阅读
  3. C语言如何将多维数组名作为函数参数?

    2024-04-06 20:50:02       13 阅读
  4. Spark面试整理-Spark中的分区是什么?

    2024-04-06 20:50:02       21 阅读
  5. python_3

    python_3

    2024-04-06 20:50:02      16 阅读
  6. c# 内存碎片化

    2024-04-06 20:50:02       17 阅读
  7. openGauss DeepSQL_库内AI算法

    2024-04-06 20:50:02       10 阅读
  8. 【C++】C++ primer plus 第三章--处理数据

    2024-04-06 20:50:02       11 阅读
  9. 滑动窗口代码模板

    2024-04-06 20:50:02       11 阅读
  10. 2024 蓝桥打卡Day34

    2024-04-06 20:50:02       14 阅读
  11. 面试算法-145-最小覆盖子串

    2024-04-06 20:50:02       8 阅读