Linux下的线程操作

一、多线程的创建于退出

1. pthread_create(线程的创建)

pthread_create 是 POSIX 线程库中的函数,用于创建一个新的线程。
函数原型如下:

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

参数说明:

  • thread:指向 pthread_t 类型的指针,用于存储新创建线程的标识符。
  • attr:指向 pthread_attr_t 类型的指针,用于指定线程的属性。可以传递 NULL,使用默认属性。
  • start_routine:指向线程函数的指针,该函数用于执行线程的主要逻辑。
  • arg:传递给线程函数的参数,可以是任意类型的指针。

pthread_create 函数会创建一个新的线程,并在新线程中执行指定的线程函数 start_routine。线程函数的参数可以通过 arg 传递。

2.ptherad_join(等待指定线程的终止)

pthread_join 是 POSIX 线程库中的函数,用于等待指定的线程终止,并获取线程的退出状态。
函数原型如下:

int pthread_join(pthread_t thread, void **retval);

参数说明:

  • thread:要等待的线程的标识符。
  • retval:指向指针的指针,用于存储线程的退出状态。如果不需要获取退出状态,可以传递 NULL。

pthread_join 函数会阻塞当前线程,直到指定的线程终止。一旦线程终止,pthread_join 函数会返回,并将线程的退出状态存储在 retval 指向的位置。如果不需要获取退出状态,可以将 retval 设置为 NULL。

3.pthread_exit(线程的退出)

pthread_exit 是 POSIX 线程库中的函数,用于终止当前线程并返回一个退出状态。
函数原型如下:

void pthread_exit(void *retval);

参数说明:

  • retval:线程的退出状态,可以是任意类型的指针。

pthread_exit 函数会立即终止当前线程,并将 retval 参数作为线程的退出状态。线程的退出状态可以是任意类型的指针,因为 pthread_exit 函数的参数类型是 void*。

4.pthread_cancel(线程的取消)

pthread_cancel 是 POSIX 线程库中的函数,用于取消指定的线程。
函数原型如下:

int pthread_cancel(pthread_t thread);

参数说明:

  • thread:要取消的线程的标识符。

5.pthread_setcancelstate(设置线程的取消状态)

pthread_setcancelstate 是 POSIX 线程库中的函数,用于设置线程的取消状态。
函数原型如下:

int pthread_setcancelstate(int state, int *oldstate);

参数说明:

  • state:要设置的取消状态,可以是以下两个值之一:
    • PTHREAD_CANCEL_ENABLE:启用线程的取消功能。
    • PTHREAD_CANCEL_DISABLE:禁用线程的取消功能。
  • oldstate:用于存储之前的取消状态的指针

pthread_setcancelstate 函数用于设置线程的取消状态。取消状态决定了线程是否可以被取消。如果取消状态被设置为 PTHREAD_CANCEL_ENABLE,则线程可以被取消;如果取消状态被设置为 PTHREAD_CANCEL_DISABLE,则线程不会被取消。
当线程被取消时,会根据取消类型的设置来决定线程的行为。取消类型可以通过 pthread_setcanceltype 函数设置。

6.例子

#include <stdio.h>                                                                                                                                  
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>pthread_t tid[2];//void *类型的函数可以没有显示的返回值
void *my_thread1(void *arg)
{for(int i = 0; i < 3; i++){   printf("this is my_thread1\n");sleep(1);}//取消线程2pthread_cancel(tid[1]);//线程退出
//  pthread_exit((void *)100);return (void *)100;
}void *my_thread2(void *arg)
{//修改属性,不能被取消int old;pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &old);for(int i = 0; i < 5; i++){   printf("%s\n", (char *)arg);sleep(1);}   
}int main()
{ //1.线程号 2.线程属性 3.线程函数 3.线程函数参数if(pthread_create(&tid[0], NULL, my_thread1, NULL) != 0){perror("pthread_create");exit(1);}//虽然 "helloworld" 是一个字符串常量,但它在 C 语言中被视为字符数组的首地址,//因此可以将其传递给 pthread_create 函数作为参数。if(pthread_create(&tid[1], NULL, my_thread2, "helloworld") != 0){perror("ptherad_create");exit(2);}//主线程一定不能提前结束//主线程等待,直到两个线程都结束void *status;pthread_join(tid[0], &status); //等待子线程结束,回收线程资源printf("线程1结束: %d\n", (int)status);pthread_join(tid[1], &status);printf("线程2结束\n");return 0;
}                   

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

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

相关文章

无人机激光雷达标定板

机载激光雷达标定板是用于校准和验证机载激光雷达系统的设备。由于机载激光雷达系统在测量地形、建筑物和植被等方面具有广泛的应用&#xff0c;因此标定板的使用对于确保测量结果的准确性和可靠性至关重要。 标定板通常由高反射率的材料制成&#xff0c;如镀金的玻璃或陶瓷&am…

计算机网络实验五

目录 实验五 路由器基本配置 1、实验目的 2、实验设备 3、网络拓扑及IP地址分配 4、实验过程 &#xff08;1&#xff09;路由器设备名称的配置 &#xff08;2&#xff09;路由器每日提示信息配置 &#xff08;3&#xff09;路由器端口的IP地址配置 &#xff08;4&…

目标检测YOLO实战应用案例100讲-【目标检测】Halcon(工具应用篇)

目录 Image、Regiong、XLD相关知识 一 读取的3种方式: 二 图像变量Region 三 图型变量

Docker 阿里云镜像仓库CR使用实践

一、使用容器镜像&#xff0c;查看镜像&#xff0c;创建&#xff0c;推送&#xff0c;拉取阿里云镜像 CR镜像管理&#xff08;阿里云容器镜像服务&#xff08;Container Registry&#xff09;&#xff09; 登录实例 未创建的镜像名称也可以push、docker的私有仓库需要提起创建…

微信小程序新手入门教程二:认识JSON配置文件

在上一篇我们介绍了微信小程序的注册和基本使用方式&#xff0c;并且写出了一个简单的页面&#xff0c;但是依然没有解释目录中的各种.json文件是做什么的。这篇我们就来认识一下各种JSON配置文件及其配置项。 一 认识JSON 首先先来认识一下JSON是什么。 JSON 指的是 JavaScri…

航道大数据应用专项研究报告(附下载)

总体目标 充分认识航道大数据对行业治理的重要性和必要性&#xff0c;航道大数据的开发和利用是建设智慧航道的基础。基于大数据的航道管理体系&#xff0c;实现了现有数据的梳理和汇聚&#xff0c;跨部门数据的交换和整合&#xff0c;建立了数据关联和深度学习的模型机制&…

网络异常案例六_IP冲突

问题现象 同一个局域网下&#xff0c;一个路由器带几十台终端设备&#xff0c;存在终端设备获取到了相同IP的场景。该路由器也是DHCP Server。 有两个设备终端&#xff0c;都显示获取到了192.168.11.177这个ip。 抓包分析 抓包过程中&#xff0c;看到的一些问题。 ps&#x…

​(三)hadoop之hive的搭建1

下载 访问官方网站https://hive.apache.org/ 点击downloads 点击Download a release now! 点击https://dlcdn.apache.org/hive/ 选择最新的稳定版 复制最新的url 在linux执行下载命令 wget https://dlcdn.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz 2.解压…

第十一篇【传奇开心果系列】Python的OpenCV技术点案例示例:三维重建

传奇开心果短博文系列 系列短博文目录Python的OpenCV技术点案例示例系列 短博文目录一、前言二、OpenCV三维重建介绍三、基于区域的SGBM示例代码四、BM&#xff08;Block Matching&#xff09;算法介绍和示例代码五、基于能量最小化的GC&#xff08;Graph Cut&#xff09;算法介…

从编程中理解:大脑的动态更新与信息处理

在深入探讨大脑动态更新与信息处理的过程中,我们可以结合编程语言C#的逻辑来构建一个以金庸武侠世界为背景的故事。设想张无忌在《倚天屠龙记》中学习和掌握九阳真经的过程,我们可以将其类比为一种内存管理和知识积累系统。以下是一个简化版但富含叙事元素的Unity C#脚本示例…

【云计算】Openstack配置Redis服务—一主二从三哨兵模式

Redis一主二从三哨兵模式 hostnamectl set-hostname //修改主机名将提供的Redis安装文件下载redis-3.2.12.tar.gz到三台虚拟机中&#xff0c;解压到/opt目录中&#xff0c;并配置yum源使用本地目录&#xff0c;命令如下&#xff08;三台虚拟机操作一致&#xff0c;以redis1主…

linux 组建和卸载raid1、raid0详细操作

组raid的最好是相同容量和型号的硬盘&#xff0c;否则会有木桶效应 linux下组raid有很多细节 一、安装raid软件 deb包 apt-get install mdadm或dnf包 dnf install mdadm二、组raid1-镜像&#xff0c;组raid0-并列 raid1和raid0只有在madam命令时一点点不同&#xff0c;其他…

智慧商城项目(ing)

项目概述 1.创建项目 目标&#xff1a;基于VueCli自定义创建项目架子&#xff0c;将目录调整成符合企业规范的目录 删除多余的文件 修改路由配置 和App.vue 新增两个目录 api/utils ①api接口模块:发送ajax请求的接口模块 ②utils工具模块:自己封装的一些工具方法模块 2…

Flutter组件 StatefulWidget、StatelessWidget 可继承写法

前言 学过Java的同学&#xff0c;应该都知道面向对象语言的三大特征&#xff0c;封装、继承、多态&#xff1b; Dart也是面向对象的语言&#xff0c;但是在Flutter中的很多组件都被下划线 _ 标记为私有&#xff0c;导致无法继承&#xff0c;本文将介绍一种非私有的创建组件写…

已解决org.springframework.dao.DataAccessException异常的正确解决方法,亲测有效!!!

已解决org.springframework.dao.DataAccessException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录 问题分析 报错原因 解决思路 解决方法 精确地识别异常类型 检查并优化SQL语句和数据操作 检查数据库连接和配置 升级或调整…

VUE开发记录

1、VUE模板传递参数到JS方法 <select-language :value"item.language" change"selectLanguage($event, key)"></select-language>selectLanguage(value, key){console.log(value, key) }, 2、Element框架el-form-item自定义label和内容 <…

追觅科技发布全折叠高速吹风机Pocket

2月2日&#xff0c;追觅科技召开2024新品发布会&#xff0c;一系列年度新品亮相。现场&#xff0c;追觅科技发布了个护重磅新品——追觅Pocket折叠高速吹风机&#xff0c;这也是行业首个全折叠高速吹风机。 创新柔性折叠技术&#xff0c;直卷吹一机全能 追觅Pocket折叠高速吹风…

07 SB3之@HttpExchange(TBD)

HttpExchange是SpringBoot3的新特性. Spring Boot3 提供了新的 HTTP 的访问能力&#xff0c;封装了Http底层细节. 通过接口简化 HTTP远程访问&#xff0c;类似 Feign 功能。 SpringBoot 中定义接口提供 HTTP 服务 --> 框架生成的代理对象实现此接口 --> 框架生成的代理…

java处理ppt方案详解

需求 需要系统中展示的ppt案例有一个动态展示的效果&#xff0c;也就是要有动画的交互&#xff0c;要求支持浏览器直接打开预览 背景 目前已经实现了前端上传pptx文件&#xff0c;后端解析为png的图片&#xff0c;前端掉接口返回对应的图片&#xff0c;模拟播放ppt的效果 各种尝…

uniapp实现自定义底部tab栏

1、自定义底部导航组件接收一个tabs数组作为参数&#xff0c;每个数组项包含icon和text字段&#xff0c;用于表示每个底部标签的图标和文本。通过遍历tabs数组&#xff0c;渲染每个底部标签项的图标和文本。activeIndex表示当前选中的底部标签的索引。点击底部标签时&#xff0…