我的编程空间,编程开发者的网络收藏夹
学习永远不晚

pthread.h头文件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

pthread.h头文件

文章目录

在Unix/Linux系统中,C/C++提供了pthread(POSIX线程)API。它允许我们为并发流程创建多个线程,这可以提高程序在多核处理器或上的执行速度。

想要使用pthreads库的所有功能,我们必须在.c或.c++文件中包含pthread.h头文件,在编译文件时在命令行中使用 -pthread 或 -lpthread。

a. pthread_create: 用于创建新线程

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

参数:
thread:返回创建的线程的线程ID,是一个指向无符号整数值的指针。
attr: 默认值为NULL,目前没有用,不需要修改。是一个指向用于定义线程属性(如分离状态、调度策略等)的结构的指针。
start_routine: 是一个指向线程执行子程序的指针。子程序的返回类型和参数类型必须是 void * 类型。如果同时传递多个指针需要用到结构体。
arg: void类型的指针,其中包含前面参数中定义的函数的参数

b.pthread_exit: 用于终止线程

 void pthread_exit(void * retval);

参数:

retval: 它是一个指向整型变量的指针,该整数储存线程终止的返回状态。读取的整型变量必须为全局变量,以便让任何等待加入该线程的线程可以读取其返回状态。

c. pthread_join: 用于等待线程终止

将子线程并入主线程,主线程会一直阻塞直至子线程执行结束(收到目标子线程的返回值)后,才回收子线程资源,解除阻塞状态,并继续执行主线程

int pthread_join(pthread_t th,void **thread_return);

参数:

th:当前线程等待加入的目标线程的线程id。
thraad_return:指向th中提到的线程的退出状态存储位置的指针。

d.pthread_self: 用于获取当前线程id

pthread_t phread_self(void);

e.pthread_equal: 用于比较两个线程是否相同。如果两个线程相等则返回一个非零值,否则返回0

int pthread_equal(pthread_t t1,                    pthread_t t2);

参数:
t1:第一个线程id
t2:第二个线程id

f.pthread_cancel: 用于向线程发送取消请求

int pthead_cancel(pthread_t thread);
参数:

thread:用于指定发送Cancel信号的目标线程

g.pthread_detach: 用于分离线程

pthread_detach这个函数就是用来分离主线程和子线程,这样做的好处就是当子线程退出时系统会自动释放线程资源。
主线程与子线程分离,子线程结束后,资源自动回收。

使用pthread_create创建的线程有两种状态:joinable和ubjoinable。默认情况下线程处于joinable状态,可以通过pthread_attr_getdetachstate 来获取线程状态。
也可以通过如下代码来设置线程状态为joinable或者unjoinable

pthread_attr_t attr;pthread_attr_init(&attr);pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);pthread_create(&thr, &attr, &thread_start, NULL);

pthread_detach()和pthread_join()就是控制子线程回收资源的两种不同方式。统一线程间的资源具有共享和独立的资源,其中共享的资源有堆、全局变量、静态变量、文件等公共资源。而独享的资源有栈和寄存器,这两种方式决定子线程结束时如何回收独享的资源。

在joinable状态结束的子线程不会释放线程所占用的堆栈和线程描述符(总计8K多)等资源,直至主线程调用了pthread_join函数后才会释放这些资源。所以pthread_join一般应用在主线程需要等待子线程结束后才继续执行的场景。

在unjoinable状态结束的子线程在结束后会自动释放占用资源。实现方式可以是在创建线程时指定属性,或者在线程执行体最后一行添加pthread_detach(pthread_self());
这样线程结束后就会自动释放所有资源。

#include #include #include void* func(void* arg){// detach the current thread// from the calling threadpthread_detach(pthread_self());printf("Inside the thread\n");// exit the current threadpthread_exit(NULL);}void fun(){pthread_t ptid;// Creating a new threadpthread_create(&ptid, NULL, &func, NULL);printf("This line may be printed before thread terminates\n");// The following line terminates// the thread manually// pthread_cancel(ptid);// Compare the two threads createdif(pthread_equal(ptid, pthread_self())printf("Threads are equal\n");elseprintf("Threads are not equal\n");// Waiting for the created thread to terminatepthread_join(ptid, NULL);printf("This line will be printed after thread ends\n");pthread_exit(NULL);}// Driver codeint main(){fun();return 0;}
This line may be printed before thread terminatesThreads are not equalInside the threadThis line will be printed after thread ends

代码中有两个执行线程,主线程等待新创建的进程退出后才会打印输出的最后一行,如果我们想手动终止线程,可以使用pthread_cacnel完成。
注意:如果我们使用exit()而非pthread_exit()来结束线程,那么与执行
exit()的线程关联的所有线程都会终止,即使某些线程可能正在运行。

来源地址:https://blog.csdn.net/Orange_pa/article/details/128476193

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

pthread.h头文件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python文件头模板

这些心得,都是帮助你们快速正规酷炫的入门python。#!/usr/bin/env python# -*- encoding: utf-8 -*-'''@Author : {YourName}@License : (C) Copy
2023-01-31

ostringstream在哪个头文件

ostringstream在头文件中。ostringstream是头文件中定义的一个类,它是一个输出流,可以像使用cout一样使用它来插入数据,但输出的结果不会显示在终端,而是保存在一个字符串对象中。os
ostringstream在哪个头文件
2023-12-09

python通过文件头判断文件类型

对于提供上传的服务器,需要对上传的文件进行过滤。 本文为大家提供了python通过文件头判断文件类型的方法,避免不必要的麻烦。 分享代码如下import struct # 支持文件类型 # 用16进制字符串的目的是可以知道文件头是多少字节
2022-06-04

C++头文件和cpp文件的原理分析

这篇文章主要介绍了C++头文件和cpp文件的原理分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-24

c++头文件怎么打开

打开 c++ 头文件需要三个步骤:在源文件中包含头文件指令(#include )。编译器搜索头文件路径(默认包含当前目录、编译器安装目录和环境变量指定的路径)。找到头文件后,打开并将其内容包含到源文件中。如何打开 C++ 头文件打开头文件
c++头文件怎么打开
2024-04-22

C++怎样编写头文件

今天就跟大家聊聊有关C++怎样编写头文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。我们之前做的左右示例都是在一个单独的cpp文件当中完成的,当我们要做一个相对复杂或大型的项目时,
2023-06-22

C++头文件和cpp文件的原理是什么

这篇文章主要介绍“C++头文件和cpp文件的原理是什么”,在日常操作中,相信很多人在C++头文件和cpp文件的原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++头文件和cpp文件的原理是什么”的疑
2023-07-05

deepin文件有个锁头怎么删除?deepin删除带锁头文件的技巧

系统的文件有个锁,那么如何关闭或删除这个锁?出现锁头就需要管理员权限,说明现在的账户没有权限对其进行操作。该怎么办呢?下面我们就来看看详细的解决办法。打开dock上文件袋,如图标记的。那么找到文件袋上有锁文件的目录,例如视频。在有锁文件这右
2022-05-21

shellexecute头文件有什么作用

ShellExecute头文件是Windows API中的一个头文件,它提供了一种简单的方法来启动外部应用程序或打开文件。通过调用ShellExecute函数,可以打开文件、启动应用程序、创建快捷方式、打开网页等。这个函数还可以接收参数,例
2023-06-13

wps怎么制作红头文件

要制作红头文件,可以使用WPS软件来完成。下面是具体的步骤:1. 打开WPS软件,进入“WPS文字”界面。2. 点击菜单栏上的“文件”选项,选择“页面设置”。3. 在弹出的页面设置窗口中,选择“纸张”选项卡,并根据需要设置纸张大小和方向。4
2023-09-29

python 中如何引用头文件

python 引入 导入 自定义模块, python 引入 导入 外部文件python 引入 导入 自定义模块, python 引入  导入 外部文件 项目中想使用以前的代码,或者什么样的需求致使你需要导入外部的包 如果是web 下,比如说
2023-01-31

C++头文件有哪些规则

C++头文件有哪些规则,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C++中的C++头文件是用户应用程序和函数库之间的桥梁和纽带,在整个软件中,头文件不是最重要
2023-06-17

c++中scanf在哪个头文件

scanf 函数在 头文件中。它用于从标准输入设备读取数据并存储在指定的变量中。格式说明符指定输入数据的格式,可变数量的参数列表表示要存储数据的变量的地址。scanf 在哪个头文件中?scanf 函数在
c++中scanf在哪个头文件
2024-05-01

C++中怎么重用头文件

这篇文章给大家介绍C++中怎么重用头文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在实际编程中,不同的类一般是放在不同的相互独立的C++头文件中的,这样两个类在相互引用时又会有不一样的问题。重复编译是问题出现的根本
2023-06-17

VScode中添加头文件和源文件(C/C++)的方法

使用VSCode编译C/C++时,会存在找不到头文件的情况,下面这篇文章主要给大家介绍了关于VScode中添加头文件和源文件(C/C++)的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
2022-11-13

编程热搜

目录