【无标题】

一、线程

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

相关推荐
堕2741 小时前
java数据结构当中的《Lambda表达式》
java·数据结构·python
叫我一声阿雷吧2 小时前
【JS实战案例】实现图片懒加载(基础版)原生JS+性能优化,新手可直接复现
开发语言·javascript·性能优化·js图片懒加载
摇滚侠2 小时前
基于 session 的登录认证方式,基于 token 的登录认证方式,对比
java·开发语言·intellij-idea
北国1372 小时前
【Java】多线程输出滞后/错误解决&&线程创建方式与原理
java·开发语言
假客套2 小时前
2026 JAVA 腾讯云人脸比对工具类,支持url或者base64进行比对
java·spring boot·腾讯云人脸比对
wfsm2 小时前
reactive streaming
java
Coder_Boy_2 小时前
【Java核心】JVM核心知识清单
java·开发语言·jvm
在坚持一下我可没意见2 小时前
ideaPool论坛系统测试报告
java·spring boot·功能测试·selenium·jmeter·mybatis·压力测试
你的冰西瓜2 小时前
C++中的queue容器详解
开发语言·c++·stl