【无标题】

一、线程

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

相关推荐
人邮异步社区1 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大2 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai2 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
维天说2 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
এ慕ོ冬℘゜2 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa2 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio
一次旅行3 小时前
Python+大模型端到端自动化日报系统
开发语言·python·自动化
Zane19943 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
噢,我明白了4 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品4 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库