线程的相关函数pthread

news2024/11/29 22:30:07

一、线程相关函数

头文件:#include <pthread.h>

注意:在编译时注意加上-lpthread参数,以调用静态链接库。因为pthread并非linux系统的默认库。

1、pthread_create

        函数声明:int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);

        参数:第一个参数为指向线程标识符的指针,传递一个pthread_t变量地址进来,用于保存新线程的tid(线程ID),可这样定义pthread_t thread1;第二个参数用来设置线程属性,如使用默认属性,则传NULL;第三个参数是线程运行函数的地址,即函数指针,指向新线程应该加载执行的函数模块,函数内包括循环;最后一个参数是运行函数的参数。

        返回值:若成功则返回0,否则返回出错编号。pthread库的函数都是通过返回值返回错误号,虽然每个线程也都有一个errno,但这是为了兼容其它函数接口而提供的,pthread库本身并不使用它,通过返回值返回错误码更加清晰。

2、pthread_join

        函数pthread_join用来等待一个线程的结束。pthread_join()函数,以阻塞的方式等待thread指定的线程结束。当函数返回时,被等待线程的资源被收回,如果线程已经结束,那么该函数会立即返回,并且指定的线程必须是joinable的。

        函数声明:int pthread_join(pthread_t thread, void **retval);

        参数:第一个参数是线程标识符,即线程ID,标识唯一线程,为被等待的线程标识符,回收线程tid;第二个参数为用户定义的指针,用来存储被等待线程的返回值(接收退出线程传递出的返回值)。

        返回值:如果执行成功将返回0,失败则返回一个错误号。

        注意:这个函数是一个线程阻塞的函数,调用它的函数将挂起等待直到被等待的(id为thread的)线程结束为止,当函数返回时,被等待线程的资源被收回。thread线程以不同的方式终止,通过pthread_join得到的终止状态是不同的,总结如下:

        如果thread线程通过return返回,retval所指向的单元里存放的是thread线程函数的返回值;如果thread线程是被别的线程调用pthread_cancel异常终止掉,retval所指向的单元里存放的是常数PTHREAD_CANCELED;如果thread线程是自己调用pthread_exit终止的,retval所指向的单元存放的是传给pthread_exit的参数;如果对thread线程的终止状态不感兴趣,可以传NULL给retval参数。
示例:
 

#include "stdafx.h"
#include <pthread.h>
#include <stdio.h>
#include <Windows.h>
#pragma comment(lib, "pthreadVC2.lib")
 
static int count = 0;
 
void* thread_run(void* parm)
{
	for (int i=0;i<5;i++)
	{
		count++;
		printf("The thread_run method count is = %d\n",count);
		Sleep(1000);
	}
	return NULL;
}
 
int main()
{
	pthread_t mythread;
	pthread_create(&mythread, NULL, thread_run,NULL);
	// 加入pthread_join后,主线程"main"会一直等待直到tid这个线程执行完毕自己才结束
	// 一般项目中需要子线程计算后的值就需要加join方法
	pthread_join(mythread,NULL);
	// 如果没有join方法可以看看打印的顺序
	printf("The count is = %d\n",count);
	getchar();
	return 0;
}

gcc thread.c -o thread  -pthread 

加了pthread_join()方法的打印:

 如果把里面的pthread_join()方法注释掉的打印:

 3、pthread_exit

        函数声明:void pthread_exit(void *retval);

        参数:线程退出时传递出的参数,可以是退出值或地址。是地址时,不能是线程内部申请的局部地址。

        注意:任何线程里exit()函数导致进程退出,其他线程未结束工作,主线程退出时不能return或exit()。需要注意,pthread_exit或者return返回的指针指向的内存单元必须是全局的或者是malloc分配的,不能在线程函数的栈上分配,因为当其它线程得到这个返回指针时线程函数已经退出了。

4、pthread_cancel

        函数声明:int pthread_cancel(pthread_t thread);

定义在Linux的pthread库中常数PTHREADCANCELED的值是-1,可以在头文件pthread.h中找到它的定义:#define PTHREAD_CANCELED((void *) -1)

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

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

相关文章

这所院校复试只刷低分,有9人擦线竟直接放弃复试!

本期为大家整理唯一个处于东部发达地区入选“双一流建设”的原双非类的综合类大学-“宁波大学”的择校分析&#xff0c;这个择校分析专题会为大家结合&#xff1a;初试复试占比、复试录取规则&#xff08;是否公平&#xff09;、往年录取录取名单、招生人数、分数线、专业课难度…

kubelet源码分析 kuberuntime的syncpod、createSandbox/createContainer函数(三)

kubelet源码分析 kuberuntime的syncpod、createSandbox/createContainer函数&#xff08;三&#xff09; 上一篇介绍了killContainer容器部分。当kill后&#xff0c;就需要重新创建sandbox和container&#xff0c;今天介绍最后一部分&#xff0c;创建容器。 这篇也是整个上面的…

通达信自动包络线指标公式以及ATR通道指标

根据亚历山大埃尔德在其著作《以交易为生》中的描述&#xff0c;自动包络线的设计思路是将通道看作试穿衬衫一样&#xff0c;寻找那些穿起来既不过松也不过紧的衬衫&#xff0c;只让手腕和脖子露在外面。自动包络线能够适应最近的行情波动&#xff0c;只有在极端情况下&#xf…

修电脑屏幕记

21年的时候媳妇买了台联想小新16Pro&#xff0c;最近发现屏幕闪&#xff0c;查了查售后政策&#xff0c;好在屏幕质保两年。 找维修点 从高德地图里搜联想售后很正常吧&#xff01;看看图片带着Lenovo的图片&#xff0c;是不是感觉是官方售后&#xff1f;拨打电话打到的是总部…

AI生成的二维码,真的太好看了!

今天我们迫不及待要和大家分享一组图片。 这是一位二维码开发者——倪豪 Isle of Chaos&#xff0c;与几位同学和老师们一起&#xff0c;使用最新的AI技术生成的非常惊艳的图片。最重要的是&#xff0c;这些图片里面都暗藏了一个可识别的二维码&#xff01; 总之&#xff0c;…

回归分析处理

线性回归 最小二乘法 对于某数据量 有呈线性关系的输出量 &#xff0c;且 &#xff0c;现有对这些数据量的采集序列&#xff0c;这些采集量会存在随机误差&#xff0c;线性回归的目的便是找到保证使误差最小的情况下的回归系数 。 即通过下列方程组求 可利用最小二乘法&a…

SaaS行业的公司为什么都需要一个专业的知识库

随着云计算和人工智能技术的不断发展&#xff0c;SaaS&#xff08;Software as a Service&#xff09;模式已经成为了企业信息化转型的必备选择。SaaS 公司提供的服务可以帮助客户在不增加IT投资的情况下&#xff0c;获得更为高效灵活的IT解决方案。但随着客户数量和服务类型的…

Windows下的网络编程Winsock

文章目录 前言1、服务器下的Winsock1.1、构建编程环境:1.2、WSAData结构体1.3、WSAStartup初始化Winsock1.4、WSACleanup释放Winsock1.5、socket创建套接字1.6、bind绑定套接字&#xff0c;调用其分配IP地址和端口号1.7、listen监听套接字1.8、accept接受客户端连接请求1.9、cl…

k8s helm安装使用

1.前言 Helm 是一个 Kubernetes 包管理工具&#xff0c;它的作用是简化 Kubernetes 应用程序的部署和管理。Helm 允许您将 Kubernetes 应用程序打包为 chart&#xff0c;chart 是一组预定义的 Kubernetes 对象模板&#xff0c;包括 Deployment、Service、Ingress 等。使用 Hel…

python中文情感分析---基于包含分数的情感词典实现对于各语句的情感分析的方案

一、详情简介: 1.此文主要研究方向为:基于包含分数的情感词典实现对于各语句的情感分析&#xff1b; 2.情感分析主要基于文本数据&#xff0c;是自然语言处理&#xff08;NPL&#xff09;的主要内容。情感分析&#xff1a;又称意见挖掘、倾向性分析等。简单而言,是对带有情感…

Unity中的【Dropdown(包括TMP_Dropdown)下拉框当只有一个下拉值时多次点击 OnValueChange事件无效】的改进方法

Dropdown(包括TMP_Dropdown)下拉框当只有一个下拉值时&#xff0c;多次点击下拉框&#xff0c;并选择选项时&#xff0c; OnValueChange事件不响应 一、下拉框提供了一个【onValueChance】的事件接口 当下拉框值变化的时候&#xff0c;代表用户选择了新的值&#xff0c;于是执…

【高级篇】分布式缓存

分布式缓存 – 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题&#xff1a; 1.Redis持久化 Redis有两种持久化方案&#xff1a; RDB持久化AOF持久化 1.1.RDB持久化 RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&#xf…

计算机毕业论文内容参考|基于App的WiFi的网络定时开关的设计与实现

文章目录 导文文章重点前言课题内容、相关技术与方法介绍技术分析技术设计技术实现总结与展望本文总结后续工作展望导文 计算机毕业论文内容参考|基于App的WiFi的网络定时开关的设计与实现 文章重点 前言 随着智能化时代的到来,移动设备已经成为我们生活中不可或缺的一部分。…

《精通特征工程》学习笔记(4):分类变量:自动化时代的数据计数

1.分类变量 分类变量是用来表示类别或标记的。在实际的数据集中&#xff0c;类别的数量总是有限的。类别可以用数字表示&#xff0c;但与数值型变量不同&#xff0c;分类变量的值是不能被排序的。&#xff08;作为行业类型&#xff0c;石油和旅游之间是分不出大小的。&#xf…

java4.6 Spring Boot整合MyBatis

Spring Boot 整合MyBatis &#xff08;一&#xff09;基础环境搭建 1、数据准备 &#xff08;1&#xff09;创建博客数据库blog CREATE DATABASE blog&#xff08;2&#xff09;在博客数据库里创建文章表t_article CREATE TABLE t_article (id int(20) NOT NULL AUTO_INCR…

安全可以被“看见”吗?华云安的答案是“可以,且持续验证”

科技云报道原创。 近年来&#xff0c;随着攻防对抗技术的不断升级&#xff0c;安全运营市场“新贵”不断涌现&#xff0c;从安全信息和事件管理&#xff08;SIEM&#xff09;、扩展检测与响应&#xff08;XDR&#xff09;&#xff0c;到攻击面管理&#xff08;ASM&#xff09;…

地震勘探基础(十三)之地震资料解释

地震资料解释 地震资料解释&#xff08;seismic interpretation&#xff09;就是把经过采集和计算机处理后的地震数据转变为地质信息的过程。也就是由已知实际观测的地震数据反演地下地质特征的过程&#xff0c;因此地震资料解释也可称为地震反演。 根据地震资料类型不同&…

【python】 用来将对象持久化的 pickle 模块

pickle 模块可以对一个 Python 对象的二进制进行序列化和反序列化。说白了&#xff0c;就是它能够实现任意对象与二进制直接的相互转化&#xff0c;也可以实现对象与文本之间的相互转化。 比如&#xff0c;我程序里有一个 python 对象&#xff0c;我想把它存到磁盘里&#xff…

有什么好用的电容笔?好用的苹果平替笔

目前市面上的电容笔品类众多&#xff0c;面对琳琅满目的电容笔&#xff0c;很多人一时之间无从下手&#xff0c;不知道口碑比较好的电容笔是什么牌子&#xff0c;因此小编根据电容笔热卖榜&#xff0c;给大家整理了一期电容笔测评&#xff0c;希望能给大家选购电容笔带来帮助和…

3DVR全景技术引领乡村发展新时代!

导语&#xff1a; 在当代社会&#xff0c;科技的迅猛发展与数字化的浪潮已经深入到各个行业&#xff0c;带来了许多新的机遇与挑战。 数字乡村的概念逐渐引起人们的关注与热议。数字乡村作为现代化与传统农业的结合产物&#xff0c;以数字技术和虚拟现实&#xff08;VR&#…