【无标题】

一、线程

线程---轻量级的进程---侧重于作为一个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或成主函数返回

相关推荐
云和数据.ChenGuang1 小时前
LangGraph 异步 Node 的设计与写法实践
开发语言·人工智能·python·机器学习·php
憧憬成为java架构高手的小白2 小时前
LangGraph4j 实战(下)
java
天诰2 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
蜗牛一步步往上爬4 小时前
第十六章 C++语言在深度学习中的应用
开发语言·c++·深度学习
这个昵称不容易6 小时前
SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在
java·springboot·毕设
计算机毕设定制辅导-无忧学长6 小时前
《基于微信小程序的居家医疗陪护预约系统设计与实现》
java·spring boot·微信小程序·uniapp·居家医疗陪护预约系统
张张123y6 小时前
DSH 插件调试避坑:client.js 设置面板、热重载与高频报错排查表
开发语言·javascript·人工智能·开源·ecmascript·后端开发·ai agent
文丑颜不良啊7 小时前
LeetCode2221~2240题目解析
java·leetcode
秋饼7 小时前
Computer Use Agent Java 落地实战:感知-行动循环、执行器与安全围栏生产级实现
java·ai·技术分享·后端开发
冻柠檬飞冰走茶9 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划