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…

影响Cache命中率的因素有哪些?

缓存命中率&#xff08;Cache Hit Rate&#xff09;是指处理器访问缓存时&#xff0c;所需数据已经在缓存中找到的次数与总访问次数的比例。提高缓存命中率可以显著提升系统性能&#xff0c;因为缓存访问速度远快于主存访问速度。影响缓存命中率的关键因素包括&#xff1a; 1.…

C语言异常处理就机制setjmp()和longjmp()

C语言setjmp()和longjmp()实现异常处理机制。 setjmp() 用于保存当前的程序执行状态。 longjmp() 用于在后面的某个时刻返回到setjmp()点的状态。 类似goto。但goto是本地的&#xff0c;只能在函数内部跳转。 setjmp()和longjmp()是非局部跳转语句&#xff0c;可在调用栈上&a…

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

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

CSRF的其他防范措施?

一般情况下&#xff0c;我们可以通过各种防护策略来防御CSRF&#xff0c;对于QA、SRE、安全负责人等&#xff0c;我们可以做哪些事情来提升安全性呢&#xff1f; 一、CSRF测试 CSRFTester是一款CSRF漏洞的测试工具&#xff0c;CSRFTester工具的测试原理大概是这样的&#xff…

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…

PostgreSQL的系统视图pg_stat_archiver

PostgreSQL的系统视图pg_stat_archiver 在 PostgreSQL 数据库中&#xff0c;pg_stat_archiver 视图提供了关于归档进程&#xff08;archiver process&#xff09;的统计信息。归档进程负责将 WAL&#xff08;Write-Ahead Logging&#xff09;日志文件复制到归档存储&#xff0…

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

目录 一、引言 二、区块链技术概述 三、区块链应用场景 四、区块链面临的挑战 五、区块链的未来展望 六、结语 一、引言 在数字化浪潮的推动下&#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;其属于…

Spring Boot中如何配置和使用多数据源

Spring Boot中如何配置和使用多数据源 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将深入探讨如何在Spring Boot应用中配置和使用多数据…

oracle with as 是什么并且怎么用

Oracle中的WITH AS语句&#xff0c;也被称为Common Table Expressions&#xff08;CTE&#xff09;&#xff0c;是一个用于定义临时结果集或视图的子句。这个临时结果集或视图只在当前的查询中存在&#xff0c;并且在查询完成后会被自动删除。使用WITH AS可以提高SQL语句的可读…

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

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

使用ScheduledExecutorService进行任务调度

使用ScheduledExecutorService进行任务调度 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在软件开发中&#xff0c;任务调度是一项重要的技术需求&#xff…

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

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