线程|线程的使用、四种实现方式

1.线程的实现方式

1.用户级线程

开销小,用户空间就可以创建多个。缺点是:内核无法感知用户级多个线程的存在,把其当作只有一个线程,所以只会提供一个处理器。

2.内核级线程

相对于用户级开销稍微大一点,可以利用多个处理器。

3.组合级线程

在不同平台Linux 中线程的实现:

Linux 实现线程的机制非常独特。从内核的角度来说,它并没有线程这个概念。Linux 把所有的线程都当做进程来实现。内核并没有准备特别的调度算法或是定义特别的数据结构来表征线程。相反,线程仅仅被视为一个与其他进程共享某些资源的进程。每个线程都拥有唯一隶属于自己的 task_struct,所以在内核中,它看起来就像是一个普通的进程(只是线程和其他一些进程共享某些资源,如地址空间)。

2.线程的使用

2.1线程库的接口---pthread函数

1)pthread_create

cpp 复制代码
#include <pthread.h>

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                        void *(*start_routine) (void *), void *arg);

pthread_create()创建一个新的线程,类似于创建新进程的fork函数

参数一:pthread_t *thread:指向一个pthread_t类型数据的指针,线程被创建时,这个指针指向的变量中会被写入一个标识符,我们用该标识符引用新线程;

thread:接收创建的新线程的ID,根据不同的ID名,对相应的线程做管理

参数二:const pthread_attr_t *attr

attr: 指定线程的属性,一般不设置特殊属性,设置该参数为NULL;

参数三:void *(*start_routine) (void *):参数为void类型指针,返回值也为指向void的指针的函数地址。告知新线程从这个函数指针指向的位置开始执行。

start_routine: 线程将要启动的指定线程函数

参数四:void *arg:给线程函数传递的参数指针

arg: 给线程函数传递的参数

//成功返回 0, 失败返回错误代码

2)pthread_join

cpp 复制代码
int pthread_join(pthread_t thread, void **retval);

pthread_join()等待 thread 指定的线程退出,线程未退出时,该方法阻塞。等价于进程中用于收集子进程退出信息的wait函数。

参数一:pthread_t thread:指定将要等待的线程(此处用pthread_t变量名),

参数二:void **retval:是一个指针,它指向另一个指针,后者指向线程的退出信息。

//成功返回 0, 失败返回错误代码

3)pthread_exit

cpp 复制代码
int pthread_exit(void *retval);

pthread_exit()线程通过调用此函数终止执行。等价于进程结束时调用exit函数退出

参数:void *retval:指向线程退出信息的指针或者说是线程退出时返回指向某个对象的指针,该对象不能是局部对象,因为此函数结束后,该局部变量就不存在了,会引起程序泄漏。

相关推荐
Java&Develop26 分钟前
QuantDinger 宝塔 Linux 部署完整指南
linux·运维·状态模式
RisunJan1 小时前
Linux命令-tcpdump(网络数据包捕获)
linux·网络·tcpdump
Titan20241 小时前
Linux网络学习:套接字、UDP的封装与应用
linux·服务器·开发语言·网络·c++
.冰块.1 小时前
两套完整 Linux 建站实战:Wordpress 博客(LAMP)+ECShop 电商(LNMP)全套手册
linux·运维·项目实战·lnmp·lamp·电商平台·博客平台
杨云龙UP2 小时前
生产环境MySQL多实例XtraBackup全量备份与rsync异地自动传输实践
linux·运维·数据库·mysql·xtrabackup·主从复制·备份恢复
拂拉氏2 小时前
【知识讲解】 Linux中vim编辑器的学习与使用
linux·编辑器·vim
苏灿烤鱼3 小时前
一套进程代替八件套,桌面更稳还是单点更大
linux·github·shell
刘梦薇3 小时前
SSH连接失败connection reset解决办法
linux·运维·ubuntu·ssh·腾讯云
Rsingstarzengjx3 小时前
stm32m157 U-boot 测试
linux·运维·服务器
月落汀兰4 小时前
Linux Nginx全套实战通关|静态站点/虚拟主机/HTTPS/PHP/反向代理/七层负载均衡,每行命令逐参数拆解
linux·nginx·https