【无标题】

一、线程

线程---轻量级的进程---侧重于作为一个CPU调度执行的基本单位。

进程---重量级的进程---侧重于作为一个资源分配的基本单位。

进程VS线程

1---线程要共享进程资源

2---线程要依附于进程

3---一个进程可以拥有多个线程

4---一个进程至少有一个线程

线程的生命周期:

1.创建---- pthread_create

2.运行

3.结束

4.资源回收

二、创建一个线程

#include <pthread.h>

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,

void *(*start_routine) (void *), void *arg);

功能:创建一个线程

参数:@thread :线程id

@attr :属性线程属性(可结性 可分离属性-----资源回收)默认NULL可结合属性

@start_routine :线程的回调函数/执行函数

@arg :这是给线程执行函数传递的参数(int float char 数组 struct)

返回值:成功:返回0;失败:返回错误码。

添加编译选项 -pthread, 在编译命令中显式链接 pthread 库。

//返回值void*NULL

//形参void *接收arg这个参数的

void * start_routine(void *arg)

注意:1.线程特点共享进程的数据很方便全局局部

2.问题共享数据方便,但是数据间相互影响也大

3.线程创建后原先主函数所在执行流,称为主线程;其他称为子线程或次线程

4.线程间地位是对等的

5.创建好后,线程的执行顺序是不确定;由操作系统调度决定

cs 复制代码
#include <stdio.h>
#include <pthread.h>
#include <errno.h>
#include <unistd.h>
void * do_sth(void *arg)
{
	int i = *(int *)arg;
	while(1)
	{
		printf("hello thread ... i = %d\n",i);
		i++;
	}
}
int main(int argc, const char *argv[])
{
	pthread_t tid;
    int t = 0;
	int ret = pthread_create(&tid,NULL,do_sth,&t);
	if(ret != 0)
	{
		errno = ret;
		perror("pthread_create is fail");
		return -1;
	}
	printf("tid = %ld\n",tid);
	sleep(1);
	
	return 0;
}

三、进程执行退出

#include <pthread.h>

void pthread_exit(void*retval);

相当于进程中exit;用在主函数中表示结束主线程(主线程执行流结束了,但是进程的空间还在,直达所有的子线程结束,才会最终销毁--不是结束进程

pthread_join 来获取

Itreturnsfromstart_routineO(线程执行函数)

pthread_cancel(3)---取消函数---效果类似于进程中发信号//kill -9
线程结束方式:

1.pthreadexit

2.线程函数return//等价于方式1

3.pthreadcancel

4.exit或成主函数返回

相关推荐
MATLAB代码顾问1 天前
5大智能算法优化标准测试函数对比(Python实现)
开发语言·python
wuminyu1 天前
专家视角看Java字节码加载与存储指令机制
java·linux·c语言·jvm·c++
万粉变现经纪人1 天前
如何解决 pip install llama-cpp-python 报错 未安装 CMake/Ninja 或 CPU 不支持 AVX 问题
开发语言·python·开源·aigc·pip·ai写作·llama
清风明月一壶酒1 天前
OpenClaw自动处理Word文档全流程
开发语言·c#·word
其实防守也摸鱼1 天前
CTF密码学综合教学指南--第五章
开发语言·网络·笔记·python·安全·网络安全·密码学
callJJ1 天前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
小郑加油1 天前
python学习Day12:pandas安装与实际运用
开发语言·python·学习
AC赳赳老秦1 天前
投标合规提效:用 OpenClaw 实现标书 / 合同自动审核、关键词校验、格式优化,降低废标风险
开发语言·前端·python·eclipse·emacs·deepseek·openclaw
KuaCpp1 天前
C++面向对象(速过复习版)
开发语言·c++
wbs_scy1 天前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言