Linux多线程

多线程

线程概念

使用多线程的理由之一相比进程,他是一种非常节俭的多任务操作方式。启动一个新的进程必须分配给他一个独立的地址空间,而进程中的多个线程,他们彼此使用相同的地址空间,共享大部分数据。

理由二是线程间的通信机制,进程具有独立的数据空间,线程不然,由于同一个进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其他线程所用。

什么是线程

轻量级的进程,本质仍是进程。

进程:有独立的PCB,且有独立的地址空间

线程:有独立的PCB,没有独立的地址空间

进程与线程的区别:

地址空间:线程共享本进程的地址空间,而进程之间是独立的地址空间。

资源:线程共享本进程的资源,不利于资源的管理与保护,而进程之间的资源是独立的,能很好的进行资源管理和保护。

健壮性:多进程要比多线程健壮,一个进程奔溃后,在保护模式下不会对其他进程产生影响,但一个线程崩溃整个进程都死掉。

执行过程:每个独立的进程有一个程序运行的入口,顺序执行列和程序入口,执行开销大。但线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,执行开销小。

可并发性:两者都可以。

切换时:进程切换时,消耗的资源大,效率低。所有涉及到频繁的切换时,使用线程要好于进程。

线程共享资源

1.文件描述符表 2.每种信号的处理方式 3.当前工作目录 4.用户ID和组ID 5.内存地址空间(.text/.data/.bss/heap/共享库)、共享全局变量

线程非共享资源

1.线程id(线程标识符) 2.处理器现场和栈指针(内核栈) 3.独立的栈空间(用户空间栈) 4.errno变量 5.信号屏蔽字 6.调度优先级

线程优缺点

优点:1.提高程序并发性 2.开销小 3.数据通信、共享数据方便。

缺点:1.属于库函数,不稳定 2.调试、编写困难、gdb 不支持 3.对信号支持不好。

线程控制原语

pthread_self函数

获取当前程序的线程ID。

pthread_t pthread_self(void)

返回值: 成功:调用的线程ID 失败:无!。

pthread_creqate函数

创建一个新的线程。

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

返回值: 成功:0; 失败:错误号 -------Linux 环境下,所有线程特点,失败均直接返回错误号

参数: pthread_t:当前Linux中可理解为: typedef unsigned long int pthread_t ;

参数1:传出参数,保存系统为我们分配好的新线程ID。 参数2:线程属性,通常传NULL,表示使用线程默认属性。若想使用具体属性也可以修改该参数。 参数3:回调子线程函数名 参数4:参3子线程函数需要的参数,没的话传NULL.

注意:编译时增加参数 -lpthread

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Linux中的多线程实际上是通过进程来模拟实现的。在Linux中,多个线程是通过共享父进程的资源来实现的,而不是像其他操作系统那样拥有自己独立的线程管理模块。因此,在Linux中所谓的“线程”其实是通过克隆父进程的资源而形成的“线程”。这也是为什么在Linux中所说的“线程”概念需要加上引号的原因。 对于Linux中的线程,需要使用线程库来进行管理。具体来说,Linux中的线程ID(pthread_t类型)实质上是进程地址空间上的一个地址。因此,要管理这些线程,需要在线程库中进行描述和组织。 由于Linux中没有真正意义上的线程,因此线程的管理和调度都是由线程库来完成的。线程库负责创建线程、终止线程、调度线程、切换线程,以及为线程分配资源、释放资源和回收资源等任务。需要注意的是,线程的具体实现取决于Linux的实现,目前Linux使用的是NPTL(Native POSIX Thread Library)。 总结来说,Linux中的多线程是通过进程来模拟实现的,线程共享父进程的资源。线程的管理和调度由线程库完成。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Linux —— 多线程](https://blog.csdn.net/sjsjnsjnn/article/details/126062127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值