pthread线程相关

LWP :轻量级 进程,本质仍是进程

进程 :独立地址空间,拥有PCB

线程:有独立的TCB,但没有独立的地址空间(共享)

区别 :在与是否共享地址文件

进程 (独居),线程(合居)

一个进程内,创建多个线程

进程是最小资源分配单位

线程是最小执行单位(cpu调度的单位)

进程变为线程

一个进程创建了一个线程以后,本身也沦落为线程

查看线程LWP

内存架构三级映射

线程共享的资源

1.文件描述符表

2.每种信号的处理方式

3.当前工作目录

4.用户id 和组id

5.内存地址空间(data、bss,heap、共享库)

线程不共享的资源

1.线程id

2.寄存器器和栈指针(内核栈)(pthread函数创建就是栈空间)

3.独立的栈空间(用户空间栈)

4.errno 变量

5.信号屏蔽字

6.调度优先级

优点

缺点一个线程崩溃,整个进程就崩溃

线程控制原语

获取线程id :

#include<pthread.h>

pthread_t pthread_self(void); //获取线程id 在进程内部标识线程身份

返回 线程id

编译时要 + -lpthread ‘

`8 #include <iostream>
9 #include <stdio.h>
10 #include <cstdlib>
11 #include <arpa/inet.h>
12 #include <unistd.h>
13 #include <algorithm>
14 #include <cstring>
15 #include<pthread.h>
16 using namespace std;
17 int main(){
18     cout<<"pid :"<<getpid()<<endl;
19     cout<<"pthread id:"<<pthread_self()<<endl;
22     return 0;
25 }`

没有错误

创建线程:

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

参数

thread :传出参数 :新子线程的id

attr :线程属性 默认传null

子线程的回调函数。pthread_create 调用成功,该数会被自动调, 子线程自动启动

参三的参数

返回值:

成功 返回0;

失败 直接返回错误号;perrno不能用了

错误处理:

创建子线程:

进程id 一样 线程id 不一样

循环创建子线程

每个线程打印自己是第几个

主子线程共享全局变量,堆空间

子线程修改全局变量堆空间,主线程也会影响

执行结果:

线程退出

void pthread_exit(void *retval);

参数:代表线程的退出值,无退出值:NULL;

exit(0):退出当前进程,结束程序;

return :

在当前函数内结束

pthread_exit():

退出当前线程;放在函数内部也一样

回收线程退出值

int pthread_join (pthread_t tid ,void**retval)

线程回收:nm给我id 我就直接收了你

参数1:待回收的线程的id

参数2:传出参数 ,回溯的那个线程的退出值。

返回值:

成功 0;

失败为:错误号;

线程分离

int pthreaddetach(pthreadt tid) //返回错误号

参数:带设置分离的线程的ID

设置为分离态的线程,在终止时,会自动清理pcb内核残留,不用回收了

对于已经分离的线程,使用pthread_join(),不能正常回收

杀死线程

int pthread_cancel(pthread_t thread);

参数:待杀死的线程ID

执行结果

总结(终止线程的方法的种类)

exit(0);

return ;

pthread_exit();

pthread_cancel();

被杀死的线程,然后回收之后,退出值是-1;

pthread cancel0)杀死线程必须要到达“取消点”(保存点),才能生效否则无法杀死线程。

应该在被cancel的线程中,调用 pthread testcancel() 函数 来 添加“取消点”(保存点)。。

线程进程控制原语比对

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

excel办公系列-图表元素及其作用

Excel图表元素及其作用 Excel图表由各种元素组成&#xff0c;每个元素都有其特定的作用&#xff0c;可以帮助我们更清晰地传达数据信息。下面将介绍Excel图表中常见的一些元素及其作用&#xff0c;并附上相关截图。 原始数据 月份 网站访问量 (万次&#xff09; 销售额 (万…

从一到无穷大 #25 DataFusion:可嵌入,可扩展的模块化工业级计算引擎实现

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言架构总览与可扩展性Catalog and Data SourcesFront End逻辑计划与逻辑计划优化器…

基于java,SpringBoot和VUE的求职招聘简历管理系统设计

摘要 基于Java, Spring Boot和Vue的求职招聘管理系统是一个为了简化求职者与雇主间互动流程而设计的现代化在线平台。该系统后端采用Spring Boot框架&#xff0c;以便快速搭建具有自动配置、安全性和事务管理等特性的RESTful API服务&#xff0c;而前端则使用Vue.js框架构建动…

超越数据的确定性:通过概率主成分分析拥抱不确定性

原文地址&#xff1a;beyond-determinism-in-data-embracing-uncertainty-with-probabilistic-principal-component-analysis 2024 年 4 月 24 日 主成分分析法&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;是一种统计方法&#xff0c;它可以通过正交…

笔试狂刷--Day9(模拟 + dp + 规律)

大家好,我是LvZi,今天带来笔试狂刷--Day9 一.添加逗号 题目链接:添加逗号 分析: 模拟 代码: import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);i…

Linux工具

本期我们来学习Linux的相关工具&#xff0c;这是我们未来经常使用的一些工具&#xff0c;是必须掌握的技能 目录 Linux 软件包管理器 yum rzsz Linux编辑器-vim使用 三种模式的切换 命令模式命令集 底行模式命令集 vim的配置 解决sudo的白名单问题 Linux编辑器—gcc/…

MacBook Pro 原生安装 Ubuntu 24.04 ARM 版

趁着休假整理家里闲置的设备&#xff0c;看到了一台许久不用的 M2 芯片的 MacBook Pro&#xff0c;想着或许应该把它改造成 ARMv64 的 CI/CD 构建机&#xff0c;于是就有了这篇文章。 本篇文章适用于 M1、M2 全系列的设备&#xff0c;包括&#xff1a;MacBook Air、MacBook Pr…

基于Java的智慧社团综合管理系统的设计与实现(论文+源码)_kaic

摘 要 随着校园文化的不断丰富&#xff0c;大学里各种社团越来越多&#xff0c;社团活动也越来越频繁&#xff0c;社员也越来越多&#xff0c;而且大学生退社、入社比较频繁&#xff0c;社团管理就显得非常繁琐而又复杂,如果采用人工管理,对管理员来说将是一件很头疼的事情。设…

加州大学欧文分校英语中级语法专项课程02:Adjectives and Adjective Clauses 学习笔记

Adjectives and Adjective Clauses course certificate 本文是 https://www.coursera.org/learn/adjective-clauses 这门课的学习笔记。 文章目录 Adjectives and Adjective ClausesWeek 01: Adjectives and Adjective PhrasesLearning Objectives Adjectives Introduction Le…

解码Starknet Verifier:深入逆向工程之旅

1. 引言 Sandstorm为&#xff1a; 能提交独立proof给StarkWare的Ethereum Verifier&#xff0c;的首个开源的STARK prover。 开源代码见&#xff1a; https://github.com/andrewmilson/sandstorm&#xff08;Rust&#xff09; L2Beat 提供了以太坊上Starknet的合约架构图&…

单链表经典算法

一&#xff0c;移除链表元素 思路一 遍历数组&#xff0c;如果遇到链表中的元素等于val的节点就执行删除操作 typedef struct ListNode ListNode;struct ListNode* removeElements(struct ListNode* head, int val) {if(headNULL){return NULL;} ListNode*pnewhead(ListNode*)m…

14.集合、常见的数据结构

集合 概念 Java中的集合就是一个容器&#xff0c;用来存放Java对象。 集合在存放对象的时候&#xff0c;不同的容器&#xff0c;存放的方法实现是不一样的&#xff0c; Java中将这些不同实现的容器&#xff0c;往上抽取就形成了Java的集合体系。 Java集合中的根接口&#x…

MVC和DDD的贫血和充血模型对比

文章目录 架构区别MVC三层架构DDD四层架构 贫血模型代码示例 充血模型代码示例 架构区别 MVC三层架构 MVC三层架构是软件工程中的一种设计模式&#xff0c;它将软件系统分为 模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Contro…

前端工程化03-贝壳找房项目案例JavaScript常用的js库

4、项目实战&#xff08;贝壳找房&#xff09; 这个项目包含&#xff0c;基本的ajax请求调用,内容的渲染&#xff0c;防抖节流的基本使用&#xff0c;ajax请求工具类的封装 4.1、项目的接口文档 下述接口文档&#xff1a; 简述内容baseURL&#xff1a;http://123.207.32.32…

SQL——高级教程【菜鸟教程】

SQL连接 左连接&#xff1a;SQL LEFT JOIN 关键字 左表相当于主表&#xff0c;不管与右表匹不匹配都会显示所有数据 右表就只会显示和左表匹配的内容。 //例显示&#xff1a;左表的name&#xff0c;有表的总数&#xff0c;时间 SELECT Websites.name, access_log.count, acc…

【机器学习-15】决策树(Decision Tree,DT)算法介绍:原理与案例实现

前言 决策树算法是机器学习领域中的一种重要分类方法&#xff0c;它通过树状结构来进行决策分析。决策树凭借其直观易懂、易于解释的特点&#xff0c;在分类问题中得到了广泛的应用。本文将介绍决策树的基本原理&#xff0c;包括熵和信息熵的相关概念&#xff0c;以及几种经典的…

上位机开发PyQt5(二)【单行输入框、多行输入框、按钮的信号和槽】

目录 一、单行输入框QLineEdit QLineEdit的方法&#xff1a; 二、多行输入框QTextEdit QTextEdit的方法 三、按钮QPushButton 四、按钮的信号与槽 信号与槽简介&#xff1a; 信号和槽绑定&#xff1a; 使用PyQt的槽函数 一、单行输入框QLineEdit QLineEdit控件可以输入…

双向链表专题

文章目录 目录1. 双向链表的结构2. 双向链表的实现3. 顺序表和双向链表的优缺点分析 目录 双向链表的结构双向链表的实现顺序表和双向链表的优缺点分析 1. 双向链表的结构 注意&#xff1a; 这⾥的“带头”跟前面我们说的“头节点”是两个概念&#xff0c;带头链表里的头节点…

Redis 实战1

SDS Redis 只会使用 C 字符串作为字面量&#xff0c; 在大多数情况下&#xff0c; Redis 使用 SDS &#xff08;Simple Dynamic String&#xff0c;简单动态字符串&#xff09;作为字符串表示。 比起 C 字符串&#xff0c; SDS 具有以下优点&#xff1a; 常数复杂度获取字符串…

JavaEE >> Spring MVC(2)

接上文 本文介绍如何使用 Spring Boot/MVC 项目将程序执行业务逻辑之后的结果返回给用户&#xff0c;以及一些相关内容进行分析解释。 返回静态页面 要返回一个静态页面&#xff0c;首先需要在 resource 中的 static 目录下面创建一个静态页面&#xff0c;下面将创建一个静态…