【无标题】

一、线程

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

相关推荐
NE_STOP11 小时前
MyBatis-配置文件解读及MyBatis为何不用编写Mapper接口的实现类
java
后端AI实验室16 小时前
用AI写代码,我差点把漏洞发上线:血泪总结的10个教训
java·ai
程序员清风18 小时前
小红书二面:Spring Boot的单例模式是如何实现的?
java·后端·面试
belhomme18 小时前
(面试题)Redis实现 IP 维度滑动窗口限流实践
java·面试
Be_Better18 小时前
学会与虚拟机对话---ASM
java
开源之眼20 小时前
《github star 加星 Taimili.com 艾米莉 》为什么Java里面,Service 层不直接返回 Result 对象?
java·后端·github
Maori31621 小时前
放弃 SDKMAN!在 Garuda Linux + Fish 环境下的优雅 Java 管理指南
java
用户908324602731 天前
Spring AI 1.1.2 + Neo4j:用知识图谱增强 RAG 检索(上篇:图谱构建)
java·spring boot
小王和八蛋1 天前
DecimalFormat 与 BigDecimal
java·后端
beata1 天前
Java基础-16:Java内置锁的四种状态及其转换机制详解-从无锁到重量级锁的进化与优化指南
java·后端