Linux--线程 创建、等待、退出

Linux上线程开发API概要

多线程开发的最基本概念主要包含:线程,互斥锁,条件。

  线程 3 种操作:线程的创建,退出,等待。

  互斥锁 4 种操作:创建,销毁,加锁和解锁。

  条件 5 种操作:创建,销毁,触发,广播和等待。

图片引用https://www.cnblogs.com/xiehongfeng100/p/4620852.html

一、线程的创建、退出及等待

1、创建

编译时:gcc 文件 -pthread

(多线程开发在 Linux 平台上已经有成熟的 pthread 库支持。)

c 复制代码
#include <pthread.h>
int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
//指向pthread_t的长整型指针,线程的属性,函数的指针,传参的参数
// 返回:若成功返回0,否则返回错误编号

当pthread_create成功返回时,由tidp指向的内存单元被设置为新创建线程的线程ID。attr参数用于定制各种不同的线程属性,暂可以把它设置为NULL,以创建默认属性的线程。

新创建的线程从start_rtn函数的地址开始运行,该函数只有一个无类型指针参数arg。如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg参数传入。

2、退出:

c 复制代码
#include <pthread.h>
int pthread_exit(void *rval_ptr);
//rval_ptr是一个无类型指针,与传给启动例程的单个参数类似。进程中的其他线程可以通过调用pthread_join函数访问到这个指针。

单个线程可以通过以下三种方式退出,在不终止整个进程的情况下停止它的控制流:

1)线程只是从启动例程中返回,返回值是线程的退出码。

2)线程可以被同一进程中的其他线程取消。

3)线程调用pthread_exit:

3、等待:

join 可以接收 exit 退出的返回值

c 复制代码
#include <pthread.h>
int pthread_join(pthread_t thread, void **rval_ptr);
// 返回:若成功返回0,否则返回错误编号

4、脱离5、线程ID获取参考资源参考地址

6、例:

c 复制代码
//线程

#include <stdio.h>
#include <pthread.h>

void *func1(void *arg)
{
	static int ret = 10;
	
	printf("ti: %ld thread is create!\n",(unsigned long)pthread_self());
	printf("ti: param is %d \n",*((int *)arg));
	
	//退出
	pthread_exit((void *)&ret)
}

int main()
{
	int ret;
	int param = 100;
	pthread_t t1;
	
	int *pret = NULL;
	
	//创建线程
	ret = pthread_create(&t1,NULL,func1,(void *)&param);//调用func1函数
	if(ret == 0){
		printf("main: create t1 success! \n");
	}
	
	printf("main: %ld\n",(unsigned long)pthread_self());
	
	//等待
	pthread_join(t1,(void **)&pret);
	
	printf("main: t1 quit:%d !\n",*pret);
	
	return 0;
}

运行结果:

bash 复制代码
main: create t1 success!
main: 139839630968576
ti: 139839622682368 thread is create!
ti: param is 100
main: t1 quit:10 !

资源参考地址: https://www.cnblogs.com/xiehongfeng100/p/4620852.html

相关推荐
wuminyu3 小时前
Kafka中sendfile与mmap实现机制解析
java·linux·c语言·jvm·c++
新时代牛马4 小时前
嵌入式网络完整篇:从LwIP/以太网驱动到 Linux netdev 与排障
linux·网络·php
猿与禅4 小时前
Linux(Ubuntu)入门到实战:系统管理、常用命令与权限体系完整指南
linux·ubuntu·apt·进程管理·系统运维·用户权限·vi/vim
前端世界4 小时前
Linux服务器实战:NTP时间同步、SELinux权限与rsyslog日志管理,一次搞懂三大运维问题
linux·运维·服务器
Android系统攻城狮4 小时前
Linux Gstreamer深度解析之gst_audio_converter_new调用流程与实战(二十)
linux·运维·服务器·gstreamer音视频·音视频进阶
海宇服务4 小时前
零信任架构实战:基于海宇对外投资历史查询服务构建自动化供应商准入网关
运维·人工智能·架构·自动化
上海云盾-小余5 小时前
BGP 高防底层原理:TCP 异常流量识别与清洗机制
运维·网络·tcp/ip
言乐66 小时前
Python加速器4跨境网络加速器
运维·服务器·开发语言·网络·python
天空之城--7 小时前
Android逆向安全合规接单指南
android·安全
蓝速科技9 小时前
医院导诊 AI 数字人一体机场景适配与落地指南丨蓝速科技
运维·数据库·人工智能·科技·自然语言处理·技术分享