当前位置: 首页 > news >正文

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

1.线程的实现方式

1.用户级线程

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

2.内核级线程

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

3.组合级线程

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

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

2.线程的使用

2.1线程库的接口—pthread函数

1)pthread_create

#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

int pthread_join(pthread_t thread, void **retval);

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

参数一:pthread_t thread:指定将要等待的线程(此处用pthread_t变量名),
参数二:void **retval:是一个指针,它指向另一个指针,后者指向线程的退出信息。

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

3)pthread_exit

int pthread_exit(void *retval);

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

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

http://www.lryc.cn/news/128267.html

相关文章:

  • Facebook 应用未启用:这款应用目前无法使用,应用开发者已得知这个问题。
  • (十八)大数据实战——Hive的metastore元数据服务安装
  • ubuntu 22.04 LTS 在 llvm release/17.x 分支上编译 cookbook llvm example Chapter 02
  • 【仿写tomcat】三、通过socket读取http请求信息
  • Hive的窗口函数与行列转换函数及JSON解析函数
  • CSS中的z-index属性有什么作用?如何控制元素在层叠上下文中的显示顺序?
  • c语言——字符转ASCLL码
  • ardupilot开发 --- 安装与调参篇
  • BC108 矩阵交换
  • 如何发现系统改进点,优化点,提高点,新系统 边界感不要太强
  • 5G无人露天矿山解决方案
  • Datawhale Django入门组队学习Task01
  • 【第二阶段】kotlin的函数类型作为返回类型
  • C++之ostream与ifstream读写文件操作(一百八十二)
  • Unity - 从PackageManager中安装内置工具
  • wsl安装Linux kali
  • ProtoBuf3语法详解
  • 尚硅谷css3笔记
  • ppt转pdf免费的工具哪个好用?免费PPT转换为PDF的方法分享
  • IDEA常用工具配置
  • hive--给表名和字段加注释
  • AutoSAR系列讲解(深入篇)13.4-Mcal Dio代码分析(上)
  • 基于Mybatis Plus的SQL输出拦截器。完美的输出打印 SQL 及执行时长、statement
  • C++ STL list
  • Django图书商城系统实战开发-实现订单管理
  • POJ 3421 X-factor Chains 埃氏筛法+质因子分解+DFS
  • 【积水成渊】9 个CSS 伪元素
  • 【002】学习笔记之typescript的【任意类型】
  • 题目:2574.左右元素和的差值
  • 成集云 | 用友U8采购请购单同步钉钉 | 解决方案