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

相关推荐
想成为大佬的每一天1 小时前
Linux:NTP服务
linux·网络
喜欢你,还有大家1 小时前
SSH服务远程安全登录
运维·安全·ssh
AI视觉网奇1 小时前
麒麟系统 doc转pdf
linux·运维·pdf
1candobetter2 小时前
软考中级习题与解答——第三章_操作系统(1)
linux·运维·服务器
studyForMokey2 小时前
【Android 消息机制】Handler
android
敲代码的鱼哇2 小时前
跳转原生系统设置插件 支持安卓/iOS/鸿蒙UTS组件
android·ios·harmonyos
翻滚丷大头鱼2 小时前
android View详解—动画
android
我是好小孩2 小时前
[Android]RecycleView的item用法
android
淮北4942 小时前
计算机网络学习(六、应用层)
linux·学习·计算机网络
宇钶宇夕2 小时前
西门子 S7-200 SMART PLC 实现星三角降压启动控制:原理、案例与完整程序
运维·自动化