线程学习笔记

一、线程概述

1.1 线程的概念
每个进程都有自己的地址空间,这就造成进程在创建、切换、撤销时,需要较大的系统开销。 为了减少系统开销,从进程中演化出了线程。 线程存在于进程中,共享进程的资源。 线程是进程中的独立控制流,由环境(包括寄存器组和程序计数器)和一系列的执行指令组成。每个进程都有一个地址空间和一个控制线程。
在这里插入图片描述

1.2 线程和进程的比较

  • 线程是CPU调度和分派的基本单位,进程是系统中程序执行和资源分配的基本单位,进程是线程的容器,一般把线程可以看作是轻量级的进程

  • 一个进程可以创建多个线程,多个线程共享一个进程的资源

  • 每一个进程创建的时候系统会给其4G虚拟内存,3G用户空间是私有的,所以进程切换时,用户空间也会切换,所以会增加系统开销,而一个进程中的多个线程共享一个进程的资源,所以线程切换时不用切换这些资源,效率会更高

  • 线程的调度机制跟进程是一样的,多个线程来回切换运行,即时间片轮转,上下文切换

二、线程的相关API

包含头文件:#include <pthread.h>
创建子线程: pthread_create()
等待子线程退出: pthread_join()
线程分离:pthread_detach()
线程退出:pthread_exit()
线程的取消: pthread_cancel()
设置线程是否可以被取消:pthread_setcancelstate()
设置线程的取消点:pthread_testcancel()
设置线程的是立即取消还是运行到取消点后取消: pthread_setcanceltype()
注册线程退出清理函数:pthread_cleanup_push()
将线程清理函数运行并弹出栈: pthread_cleanup_pop()

三、注意事项

  • 与fork不同的是pthread_create创建的线程不与父线程在同一点开始运行,而是从指定的函数开始运行,该函数运行完后,该线程也就退出了。

  • 线程依赖进程存在的,如果创建线程的进程结束了,线程也就结束了。

  • 线程函数的程序在pthread库中,故链接时要加上参数-lpthread

  • linux线程执行和windows不同,pthread有两种状态:
    可结合的(joinable)或者是分离的(detached),线程默认创建为可结合态。
    (1)如果线程是joinable状态,当线程函数自己返回退出时或pthread_exit时都不会释放线程所占用堆栈和线程描述符(总计8K多)。只有当你调用了pthread_join之后这些资源才会被释放。
    (2)若是detached状态的线程,这些资源在线程函数退出时或pthread_exit时自动会被释放,使用pthread_detach函数将线程设置为分离态。
    (3)创建一个线程后应回收其资源,但使用pthread_join函数会使调用者阻塞,故Linux提供了线程分离函数:pthread_detach

  • pthread_cancel函数的实质是发信号给目标线程thread,但发送成功并不意味着目标线程一定就会终止,取决于线程的取消属性

  • 和进程的退出清理一样,线程也可以注册它退出时要调用的函数,这样的函数称为线程清理处理程序(thread cleanup handler)。
    (1)注意:线程可以建立多个清理处理程序。 处理程序在栈中,故它们的执行顺序与它们注册时的顺序相反。
    (2)当线程执行以下动作时会调用清理函数:
    1、调用pthread_exit退出线程。 2、响应其它线程的取消请求。
    3、用非零execute调用pthread_cleanup_pop

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以为您提供一些关于 LabVIEW 学习笔记。LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种图形化编程环境,主要用于控制、数据采集和处理等应用。以下是一些常见的学习笔记: 1. 界面与控件:LabVIEW 的主要特点之一是其图形化界面。了解如何创建界面和使用各种控件(如按钮、滑块、图表等)是学习 LabVIEW 的第一步。 2. 数据流编程:LabVIEW 是一种基于数据流的编程语言,意味着程序的执行顺序由数据的流动决定。理解数据流编程的概念对于使用 LabVIEW 是非常重要的。 3. 连接与通信:LabVIEW 可以与其他设备或系统进行通信,如传感器、仪器、数据库等。学习如何建立连接和进行数据交换是实际应用中常见的需求。 4. 数据处理与分析:LabVIEW 提供了丰富的数据处理和分析工具,如滤波、傅里叶变换、统计分析等。学习如何使用这些工具可以帮助您更好地处理和分析数据。 5. 并行与多线程:LabVIEW 支持并行处理和多线程操作,可以提高程序的性能和效率。了解如何利用这些特性可以优化程序的运行。 6. 错误处理与调试:在开发过程中,遇到错误是不可避免的。学习如何处理错误和进行调试可以帮助您快速解决问题。 这些只是一些基础的学习笔记,希望对您的 LabVIEW 学习有所帮助。如果您有具体的问题或者需要进一步的指导,请随时告诉我。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值