概述

  • 概念

    • 计算机同时运行多个程序的能力,多任务处理的方法是:运行第一个程序的一段代码,保存工作环境;再运行第二个程序的一段代码,保存工作环境;……恢复第一个程序的工作环境,执行第一个程序的下一段代码……程序的局部性原理,是多任务处理最重要的基础。
  • 多任务处理的类型
    • 基于进程的多任务处理

      • 程序之间的并发执行,由操作系统完成调度任务
    • 基于线程的多任务处理
      • 程序内部的并发执行,用户(系统的用户)可以调度任务
  • 关于
    • 若你想了解更多关于多任务处理的知识,如:任务调度,同步异步等,请阅读《计算机操作系统》一书。

多线程

  • 多线程编程

    • C++ 中的多线程编程是基于 POSIX(Portable Operating System Interface Of UNIX) Threads 或 Pthreads 提供的 API
    • 注意
      • 线程可以理解为轻量级的进程,一个进程中的资源被所有的子线程共享,线程之间是同等的
  • 线程操作
    • 创建线程

      int pthread_create(pthread_t * __restrict, const pthread_attr_t * __restrict,
      void *(*)(void *), void * __restrict);
      • 第一个参数:一个不透明的、唯一的标识符,用于表示例程返回的新线程
      • 第二个参数:一个不透明的属性对象,可以被用来设置线程属性。可以指定线程属性对象,也可以使用默认值 NULL
      • 第三个参数:C++ 例程,一旦线程被创建就会执行
      • 第四个参数:一个可能传递给第三个参数(C++ 例程)的参数。必须通过把引用作为指针强制转换为 void 类型进行传递。如果没有传递参数,则使用 NULL。可以接受任何类型的参数,因为类型是 void *
    • 终止线程

      • 隐式终止

        • 在 main 函数终止时,未显示终止的线程会自动终止
      • 显示终止
        • 使用 pthread_exit 函数终止

          void pthread_exit(void *)
    • 连接和分离线程

      • 连接(实现线程间同步的一种方式)

        int pthread_join(pthread_t , void **)
        • 创建线程时,需要明确指定线程是否可连接。可移动设备中,并不是所有创建的线程默认都是可连接的。为了明确指定创建一个线程的连接性和分离性,创建一个线程可分为以下四个步骤:

          • 声明一个pthread_attr_t数据类型的pthread属性变量
          • 使用pthread_init()初始化属性变量
          • 使用pthread_attr_setdetachstate()设置属性为分离状态
          • 当使用完成后,使用pthread_attr_destroy()释放属性用到的资源
        • pthread_join()将挂起调用线程的执行直到目标线程终止,除非目标线程已经终止了
      • 分离

        int pthread_detach(pthread_t)
        • 通常不建议调用 pthread_detach() 去分离一个线程,只需要在创建线程的时候,指定线程为可分离即可

C++语言-09-多任务的更多相关文章

  1. 用简单的C语言实现多任务轮流切换(模拟操作系统线程机制)

    最近在看linux内核的进程调度算法,也写了不少的内核注释,也参考了鸿哥的单片机框架,代码注释就开源在我的CSDN的git代码库里,有兴趣的可以去瞧瞧. 突发奇想,想到了既然单片机能够实现,那么我用标 ...

  2. Windows7WithSP1/TeamFoundationServer2012update4/SQLServer2012

    [Info   @09:03:33.737] ====================================================================[Info   @ ...

  3. Web前端开发推荐阅读书籍、学习课程下载

    转自http://www.xuanfengge.com/fe-books.html 前言 学校里没有前端的课程,那如何学习JavaScript,又如何使自己成为一个合格的前端工程师呢? 除了在项目中学 ...

  4. 浅谈JS异步(asychrouous)

    一.概念 (1)asychronous 异步 是JS这种单线程语言解决多任务的一种方法,将耗时的任务(io)设定为异步工作,先交给浏览器负责相关功能的线程来实现耗时的部分工作,按顺序放入任务队列中,等 ...

  5. Pythia:Facebook最新开源的视觉、语言多任务学习框架

    Facebook 发布了一个全新的多任务学习框架 Pythia,它基于 PyTorch 且可用于视觉和语言的联合任务.Pythia 是一种模块化的即插即用框架,数据科学家和机器学习开发者能快速构建.复 ...

  6. 2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机)

    2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机) https://www.luogu.com.cn/problem/P2292 题意: 标点符号的出现晚于文字的出 ...

  7. go语言之进阶篇多任务资源竞争问题

    1.多任务资源竞争问题 示例: package main import ( "fmt" "time" ) //定义一个打印机,参数为字符串,按每个字符打印 // ...

  8. C语言进阶——const 和 volatile 分析09

    const只读变量: const修饰的变量是只读的,本质还是一个变量 const修饰的局部变量在栈上分配空间 const修饰的全局变量在全局函数区分配资源空间 const只在编译器有用,在运行期无用 ...

  9. C#3.0新增功能09 LINQ 基础01 语言集成查询

    连载目录    [已更新最新开发文章,点击查看详细] 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称. 数据查询历来都表示为简单的字符串,没有编译时类型检查或 Inte ...

  10. C语言|博客作业09

    这个作业属于哪个课程 C语言程序设计II 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10027 我在这个课程 ...

随机推荐

  1. 30天C#基础巩固-----值类型/引用类型,泛型,空合并操作符(??),匿名方法

    一:值类型/引用类型的区别      值类型主要包括简单类型,枚举类型,和结构体类型等,值类型的实例通常被分配在线程堆栈上面变量保存的内容是实例数据本身.引用类型被分配在托管堆上,变量保存的是地址.引 ...

  2. 【转载】[jquery.validate]自定义方法实现"手机号码或者固定电话"的逻辑验证

    最近项目开发中遇到这样的需求“手机号码或者固话至少填写一个”,如下图所示: 项目采用的jquery.validate.js验证组件,目前组件不支持这种“或”逻辑的验证,于是就自己定义一个 jQuery ...

  3. [转载]MongoDB开发学习 经典入门

    如果你从来没有接触MongoDB或对MongoDB有一点了解,如果你是C#开发人员,那么你不妨花几分钟看看本文.本文将一步一步带您轻松入门. 阅读目录 一:简介 二:特点 三:下载安装和开启服务器 四 ...

  4. MVC EF中Attach和Entry区别

    EF:加入容器三种方式-->查询,attach,entry.不在容器里,不能用remove,add等方法. 1.0 使用Attach可能会出错.//attach 意思:附上; 贴上,系;var ...

  5. Scalaz(13)- Monad:Writer - some kind of logger

    通过前面的几篇讨论我们了解到F[T]就是FP中运算的表达形式(representation of computation).在这里F[]不仅仅是一种高阶类型,它还代表了一种运算协议(computati ...

  6. 《Java4Android》视频学习笔记——抽象类和抽象函数

    抽象函数的语法特征 1.类是抽象的,对象是具体的.面向对象里面有个非常重要的特征:先抽象,后具体. 2.只有函数的定义,而没有函数体的函数叫做抽象函数. abstract void fun(); ( ...

  7. 自定义开关ToggleButton的使用

    [代码]: toggleMe.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override p ...

  8. log4j配置文件详解

    在开发中经常会碰到日志,网上关于日志的框架也很多,像log4j.self4j.common-logging等,下面对log4j进行介绍. log4j是java开发的日志框架,具有低侵入的特点,其重点使 ...

  9. 【FFmpeg】Windows下64位ffmpeg编译

    本文主要记录在64位Windows 7下,编译64位ffmpeg的过程. 1.资源准备 (1). MSYS http://sourceforge.net/projects/mingwbuilds/fi ...

  10. Java基础学习 -- Java(OOP)程序的设计原则

    避免代码复制.解决方案:函数.父类: 封装.尽量private每个类的成员变量,用操作封装数据,减少类与类之间成员变量的直接调用,而是调用method,降低耦合: 可扩展性最大化.尽量使用框架+数据的 ...