Linux高并发服务器开发(六)线程

文章目录

  • 1. 前言
  • 2 线程相关操作
  • 3 线程的创建
  • 4 进程数据段共享和回收
  • 5 线程分离
  • 6 线程退出和取消
  • 7 线程属性(了解)
  • 8 资源竞争
  • 9 互斥锁
    • 9.1 同步与互斥
    • 9.2 互斥锁
  • 10 死锁
  • 11 读写锁
  • 12 条件变量
  • 13 生产者消费者模型
  • 14 信号量
  • 15 哲学家就餐


1. 前言

进程是CPU 分配资源的最小单位, 线程是系统调度的最小单位。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果复制对方的地址空间,就产生出一个进程
如果共享对方的地址空间,就产生一个线程
在这里插入图片描述

2 线程相关操作

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3 线程的创建

在这里插入图片描述
在这里插入图片描述

4 进程数据段共享和回收

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

资源回收
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5 线程分离

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
主进程退出,线程也会退出

6 线程退出和取消

在这里插入图片描述

在这里插入图片描述

线程取消
在这里插入图片描述

在这里插入图片描述

7 线程属性(了解)

在这里插入图片描述

8 资源竞争

打印机模型
在这里插入图片描述

9 互斥锁

9.1 同步与互斥

在这里插入图片描述
互斥: 同一时刻只能一个人使用,必须等一个线程运行完毕,在执行另一个线程。
同步: 使用先后顺序,按次序完成特定的任务。比如A线程的运行依赖于B任务产生的数据。他也是一种互斥,但有先后顺序。

9.2 互斥锁

防止同一个资同时被多个任务使用。

在这里插入图片描述

初始化互斥锁
在这里插入图片描述
销毁
在这里插入图片描述
上锁
在这里插入图片描述

解锁
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10 死锁

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

11 读写锁

读写锁是一个锁,读锁和写锁都是也给锁中的东西
在这里插入图片描述
在这里插入图片描述
初始化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

12 条件变量

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

13 生产者消费者模型

在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
#include<string.h>#include<pthread.h>
#include <unistd.h> typedef struct _node_t
{int data;struct _node_t *next;}node_t;node_t *head = NULL;pthread_cond_t cond;
pthread_mutex_t mutex;void *producer(void* arg)
{while(1){pthread_mutex_lock(&mutex);node_t *new = malloc(sizeof(node_t));if(NULL == new){printf("malloc failed");break;}memset(new, 0 ,sizeof(node_t));new->data = random() % 100 +1;new->next = NULL;       new->next = head;head = new;printf("生产者生产产品 %d\n", new->data);pthread_mutex_unlock(&mutex);pthread_cond_signal(&cond);sleep(random()%3 +1);}return  NULL;}void *customer(void* arg)
{node_t *tmp = NULL;// 循环消费while(1){pthread_mutex_lock(&mutex);if(NULL == head){// 等待 printf("产品链表为空");pthread_cond_wait(&cond, &mutex);}else{// 删除第一个节点tmp = head;head = head->next;printf("消费者消费 %d\n", tmp->data);free(tmp);pthread_mutex_unlock(&mutex);sleep(random() %3 +1);}}return  NULL;}int main()
{pthread_t tid1 = -1, tid2 = -1;srandom(getpid());int ret = -1;ret = pthread_mutex_init(&mutex, NULL);if(0!= ret){printf("pthread_cond_inti failed");return 1;}ret = pthread_cond_init(&cond, NULL);if(0!= ret){printf("pthread_cond_inti failed");return 1;}// 创建线程 生产者线程和消费者线程pthread_create(&tid1, NULL, producer, NULL);pthread_create(&tid2, NULL, customer, NULL);pthread_join(tid1,NULL);pthread_join(tid2,NULL);pthread_mutex_destroy(&mutex);pthread_cond_destroy(&cond);return 0;
}

14 信号量

在这里插入图片描述
P操作,占用资源
V操作,释放资源

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

15 哲学家就餐

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/37319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【FFmpeg】avio_open2函数

【FFmpeg】avio_open2函数 1.avio_open21.1 创建URLContext&#xff08;ffurl_open_whitelist&#xff09;1.1.1 创建URLContext&#xff08;ffurl_alloc&#xff09;1.1.1.1 查找合适的protocol&#xff08;url_find_protocol&#xff09;1.1.1.2 为查找到的URLProtocol创建UR…

通信系统网络架构_3.移动通信网络架构

移动通信网为移动互联网提供了强有力的支持&#xff0c;尤其是5G网络为个人用户、垂直行业等提供了多样化的服务。以下从业务应用角度给出面向5G网络的组网方式。 1.5GS与DN互连 5GS&#xff08;5G System&#xff09;在为移动终端用户&#xff08;User Equipment&#xff0c;…

BLACKBOX.AI:解锁开发新纪元,加速编程学习的AI神器!

文章目录 &#x1f4af;BLACKBOX.AI 官网&#x1f341;1 BLACKBOX.AI 工具使用教程&#x1f341;2 BLACKBOX.AI工具使用界面介绍&#x1f341;3 Chat(聊天)功能&#x1f341;4 Explore (探索)功能&#x1f48e;4.1 Terminal(终端)功能&#x1f48e;4.2 Discover(发现)功能&…

STM32 IWDG(独立看门狗)

1 IWDG简介 STM32有两个看门狗&#xff1a;一个是独立看门狗&#xff08;IWDG&#xff09;&#xff0c;另外一个是窗口看门狗。独立看门狗也称宠物狗&#xff0c;窗口看门狗也称警犬。本文主要分析独立看门狗的功能和它的应用。 独立看门狗用通俗一点的话来解释就是一个12位的…

关于转BigDecimal对象时,精度问题

//浮点型数值Double d 0.0003d;//转BigDecimal对象BigDecimal a new BigDecimal(d);System.out.println(String.format("浮点类型数字:%.4f创建BigDecimal对象并且保留多位小数并且保留多位小数时,精度会变多,结果为%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));…

format()方法——格式化字符串

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法介绍 format()可以对数据进行格式化处理操作&#xff0c;语法如下&#xff1a; format(value, format_spec) format_spec为格式化解释。当参数…

【计算机毕业设计】092基于微信小程序二手闲置交易市场

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

探索区块链:颠覆性技术的崛起

目录 一、引言 二、区块链技术概述 三、区块链应用场景 四、区块链面临的挑战 五、区块链的未来展望 六、结语 一、引言 在数字化浪潮的推动下&#xff0c;区块链技术以其独特的去中心化、透明性和不可篡改性等特性&#xff0c;正在逐步改变我们的生活。从金融领域到供应…

基于Java的茶文化交流系统【附源码+LW】

摘 要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔阂给消除了&#xff0c;让整个世界都可以即时通话…

MySQL数据库存储引擎

MySQL数据库存储引擎 存储引擎概念 存储引擎也称为表类型 通过不同的技术比如说&#xff0c;存储机制&#xff0c;索引技巧&#xff0c;锁定水平等等&#xff0c;来提供不同的功能。 查看MySQL支持的存储引擎 show engines\G&#xff1b; 常用引擎比较 对事务有需求 innodb …

TiDB-从0到1-数据导出导入

TiDB从0到1系列 TiDB-从0到1-体系结构TiDB-从0到1-分布式存储TiDB-从0到1-分布式事务TiDB-从0到1-MVCCTiDB-从0到1-部署篇TiDB-从0到1-配置篇TiDB-从0到1-集群扩缩容 一、数据导出 TiDB中通过Dumpling来实现数据导出&#xff0c;与MySQL中的mysqldump类似&#xff0c;其属于…

JavaWeb——MySQL:navicate客户端工具简单使用

目录 1. 连接 2. 新建数据库 3. 使用数据库 4. 新建表 5.使用表 6. 导出数据库 我这里是英文版&#xff0c;没有进行汉化。 1. 连接 点击左上角Connection&#xff0c;选择MySQL&#xff0c;&#xff08;我连接的是自己计算机上的数据库&#xff09;连接名输入&#x…

抖音开放平台运营同学联系我了,非常感谢

大家好&#xff0c;我是小悟 是怎么个事呢&#xff1f; 前几天在对接抖音开放平台&#xff0c;服务商代开发小程序里面的小程序备案&#xff0c;上传备案图片接口遇到了问题&#xff0c;具体的问题可详阅【抖音开放平台&#xff0c;这谁写的&#xff0c;要扣绩效吧】。 评论…

Java编程基本功大揭秘 | 详解深入分析Java线程池源码和底层原理,掌握实战技巧【1】

详解深入分析Java线程池源码和底层原理 文章大纲引言Java线程池概念及重要性 ThreadPoolExecutor类的概述ThreadPoolExecutor类的基本功能和作用**基本功能****核心作用** ThreadPoolExecutor主要构造函数及其参数继承关系链功能介绍ThreadPoolExecutor 构造器构造器参数构造器…

破解对LabVIEW的偏见

LabVIEW被广泛应用于科学研究、工程测试和自动化控制领域&#xff0c;具有专业性和高效的开发能力。尽管有人对其存在偏见&#xff0c;认为不如C语言&#xff0c;但LabVIEW的图形化编程、强大集成能力、丰富社区支持和专业功能&#xff0c;使其在许多实际应用中表现出色。通过多…

Go语言环境安装

Go下载地址 哪个能用用哪个。 https://go.dev/ https://golang.google.cn/&#xff08;Golang官网的官方镜像&#xff09; Windows 使用.msi安装包安装 下载msi文件 安装 双击运行go1.22.4.windows-amd64.msi Next 勾选I accept the terms in the License Agreement&…

收藏 | SSL证书无效的原因和解决办法

当浏览器访问一个使用SSL证书保护的网站时&#xff0c;会检查其证书的有效性。如果发现证书存在问题&#xff0c;浏览器会显示“SSL证书无效”的警告信息&#xff0c;提醒用户存在潜在的安全风险。 “SSL证书无效”的警告可能会导致用户离开站点&#xff08;并且永远不会返回&…

MySQL高级-SQL优化-小结

文章目录 1、insert 优化2、主键优化3、order by 优化4、group by 优化5、limit 优化6、count 优化7、update 优化 1、insert 优化 insert&#xff1a;批量插入、手动控制事务、主键顺序插入 大批量插入&#xff1a;load data local infile 2、主键优化 主键长度尽量短、顺序插…

系统漏洞复现与勒索病毒

知识点&#xff1a;SMB漏洞介绍、漏洞复现流程、勒索病毒攻击与防护 渗透测试相关&#xff1a; 基本概念&#xff1a; 渗透测试就是利用我们所掌握的渗透知识&#xff0c;对网站进行一步一步的渗透&#xff0c;发现其中存在的漏洞和隐藏的风险&#xff0c;然后撰写一篇测试报…

FastAPI教程I

本文参考FastAPI教程https://fastapi.tiangolo.com/zh/tutorial 第一步 import uvicorn from fastapi import FastAPIapp FastAPI()app.get("/") async def root():return {"message": "Hello World"}if __name__ __main__:uvicorn.run(&quo…