C++语言-09-多任务
概述
- 概念
- 计算机同时运行多个程序的能力,多任务处理的方法是:运行第一个程序的一段代码,保存工作环境;再运行第二个程序的一段代码,保存工作环境;……恢复第一个程序的工作环境,执行第一个程序的下一段代码……程序的局部性原理,是多任务处理最重要的基础。
- 多任务处理的类型
- 基于进程的多任务处理
- 程序之间的并发执行,由操作系统完成调度任务
- 基于线程的多任务处理
- 程序内部的并发执行,用户(系统的用户)可以调度任务
- 基于进程的多任务处理
- 关于
- 若你想了解更多关于多任务处理的知识,如:任务调度,同步异步等,请阅读《计算机操作系统》一书。
多线程
- 多线程编程
- 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-多任务的更多相关文章
- 用简单的C语言实现多任务轮流切换(模拟操作系统线程机制)
最近在看linux内核的进程调度算法,也写了不少的内核注释,也参考了鸿哥的单片机框架,代码注释就开源在我的CSDN的git代码库里,有兴趣的可以去瞧瞧. 突发奇想,想到了既然单片机能够实现,那么我用标 ...
- Windows7WithSP1/TeamFoundationServer2012update4/SQLServer2012
[Info @09:03:33.737] ====================================================================[Info @ ...
- Web前端开发推荐阅读书籍、学习课程下载
转自http://www.xuanfengge.com/fe-books.html 前言 学校里没有前端的课程,那如何学习JavaScript,又如何使自己成为一个合格的前端工程师呢? 除了在项目中学 ...
- 浅谈JS异步(asychrouous)
一.概念 (1)asychronous 异步 是JS这种单线程语言解决多任务的一种方法,将耗时的任务(io)设定为异步工作,先交给浏览器负责相关功能的线程来实现耗时的部分工作,按顺序放入任务队列中,等 ...
- Pythia:Facebook最新开源的视觉、语言多任务学习框架
Facebook 发布了一个全新的多任务学习框架 Pythia,它基于 PyTorch 且可用于视觉和语言的联合任务.Pythia 是一种模块化的即插即用框架,数据科学家和机器学习开发者能快速构建.复 ...
- 2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机)
2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机) https://www.luogu.com.cn/problem/P2292 题意: 标点符号的出现晚于文字的出 ...
- go语言之进阶篇多任务资源竞争问题
1.多任务资源竞争问题 示例: package main import ( "fmt" "time" ) //定义一个打印机,参数为字符串,按每个字符打印 // ...
- C语言进阶——const 和 volatile 分析09
const只读变量: const修饰的变量是只读的,本质还是一个变量 const修饰的局部变量在栈上分配空间 const修饰的全局变量在全局函数区分配资源空间 const只在编译器有用,在运行期无用 ...
- C#3.0新增功能09 LINQ 基础01 语言集成查询
连载目录 [已更新最新开发文章,点击查看详细] 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称. 数据查询历来都表示为简单的字符串,没有编译时类型检查或 Inte ...
- C语言|博客作业09
这个作业属于哪个课程 C语言程序设计II 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10027 我在这个课程 ...
随机推荐
- 发布网站ASP.NET(ASPX)
Insus.NET平时是怎样发布自己的开发网站,今天分享给大家.或许你的做法就是跟Insus.NET一样. 这篇还是先在VS创建一个站点,然后再部署至IIS中去. 一般情况之下,Insus.NET创建 ...
- .net的垃圾回收机制简述
.如何理解.net中的垃圾回收机制. .NET Framework 的垃圾回收器管理应用程序的内存分配和释放.每次您使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存.只要托管堆中有地址 ...
- .NET Core 调用WCF 服务
.NET Core 和ASP.NET Core 已经可以调用WCF 服务. 环境要求: VS2015 Update 2 +VS2015 Tooling + .NET Core SDK 下载地址: ht ...
- C++ VS2012 内存泄露检测
在VS2012中添加部分代码,可以起到检测内存泄露的作用. 今天刚刚收到的解决办法,原理还不是很清楚.先分享出来 1. 头文件中添加以下代码 #ifdef _DEBUG #define DEBUG_C ...
- Tarjan算法---强联通分量
1.基础知识 在有向图G,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极大强连通子 ...
- Win10 IoT C#开发 1 - Raspberry安装IoT系统及搭建开发环境
Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. The ...
- Delphi Mac App 名称支持国际化多语显示
作用:在 OSX 图标下方显示 App 中文繁体或简体的名称(系统自动选取) 适用:XE7, XE8 for OSX 操作: 创建一个新工程. 在工程目录下创建二个文件夹(zh_??.lproj)文件 ...
- 迷信again
当在VirtualBox中尝试安装Debian 8.3.0 三次都失败后 - 每次卡在安装软件这一步,我决定不再迷信Debian软件包质量高这件事.
- Codeforces Round #369 (Div. 2)---C - Coloring Trees (很妙的DP题)
题目链接 http://codeforces.com/contest/711/problem/C Description ZS the Coder and Chris the Baboon has a ...
- javaweb学习总结(十一)——使用Cookie进行会话管理
一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...