IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 每日C++_1123 -> 正文阅读

[C++知识库]每日C++_1123

并发,进程,线程基本概念

并发

两个或者多个任务同时发生,一个程序同时执行多个独立任务

进程

一个可执行程序运行起来了,就创建一个进程

线程

每个进程,都有一个主线程,并且主线程是唯一的,也就是一个进程只有一个主线程。
当你执行一个可执行程序,产生一个进程后,这个主线程就随着一个进程启动起来了。
F5运行的时候,进程的主线程来调用main函数的代码
线程,代码的执行通路。
除了主线程外,可以通过自己写代码来创建其他线程,其他线程是走别的地方
每创建一个新的线程,就可以在同一时刻,多干一个不同的事情

多线程

线程并不是越多越好,每个线程,就需要一个独立的堆栈空间,线程之间切换要保存很多中间状态

并发的实现方法

1)多个进程实现并发
2)在单独进程中,创建多个线程来实现并发,自己写代码来创建除了主线程之外的其他线程

多进程并发

相同电脑进程之间通信(管道,文件,消息队列,共享内存)
不同电脑:Socket通信技术

多线程并发

单个进程中创建多个线程
每个线程都有自己独立的运行路径,但是一个进程中多个线程都是共享地址空间(内存的)
全局变量,指针,引用都可以在线程中传递,所以使用多线程开销远远小于多进程

总结


线程启动更快,更轻量级
系统资源开销更少,执行更快,共享内存比其他任何通信方式都快
缺点是使用难度高,小心处理数据一致性

写线程

包含头文件thread

void myprint()
{
?? ?cout << "1111" << endl;
?? ?cout << "2222" << endl;
}
int main()
{
?? ?
?? ?thread mythe(myprint);//创建了线程,线程执行的入口,myprint(),这个myprint线程开始执行
?? ?mythe.join();//加入汇合,阻塞主线程,让主线程等待子线程执行完毕,然后两个汇合。主线程往下走
?? ?cout << "end" << endl;
?? ?return 0;
}

Detach()

传统多线程主线程要等待至子线程执行完毕,然后自己最后退出
分离:主线程不与子线程汇合,各自执行,互不影响。
创建了多个子线程,让主线程逐个等待子线程结束。但是这个方法并不太好,应该逐个等待。
这个子线程相当于被c++运行时刻接管,当这个子线程执行完后,由运行时库清理相关资源。
一旦用detach 不能join

joinable()
如果能join或者detach

类对象(可调用对象)创建线程

class TA
{
public:
?? ?void operator()()
?? ?{
?? ??? ?cout << "111" << endl;
?? ??? ?cout << "2222" << endl;
?? ?}
};
int main()
{
?? ?TA tt;
?? ?thread mythe(tt);//创建了线程,线程执行的入口,myprint(),这个myprint线程开始执行
?? ?mythe.join();//加入汇合,阻塞主线程,让主线程等待子线程执行完毕,然后两个汇合。主线程往下走
?? ?cout << "end" << endl;
?? ?return 0;
}

传递临时对象作为线程参数

指针传递在detach中一定会有问题,因为地址是一致的,不知何时线程会销毁这个变量。
char[] 传递时,可以用string &str 来接收

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 07:56:38  更:2021-11-25 07:59:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:05:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码