下面分三个方面多线程技术的必须掌握一些基本知识。

1.进程

2.线程

3.并发

(1)进程

一个可执行程序运行起来了,即为创建了一个进程。如在电脑上打开了word,就创建了一个word进程,打开QQ,又创建了一个QQ进程。

可以在任务管理器中----->用户中查看进程。

不同的进程之间的通信方式有:管道、消息队列、共享内存、信号量(同一台电脑),socket(支持不同电脑)。

(2)线程

1.线程可理解成一条代码执行的通道

2.线程与进程之间的关系:

同一个进程允许有多个线程;

同一个进程的每个线程都有独立的堆栈空间;

一个进程只有一个主线程,主线程随着进程的开始而开始,结束而结束;(例如我们在运行一个简单的打印"hello world"程序时,实际上时进程的主线程来执行main函数中的打印”hello world"代码)

一个进程中的所有线程共享内存,全局变量、指针、引用都可以在线程之间传递,这也是多线程技术性能高的原因,但同时也带来了数据性一致的问题;(例如线程A和线程B同时对同一块内存写入数据,那么可能出现问题)

(3)并发

两个或多个任务同时进行,包括多进程并发,多线程并发。

其他:

多线程技术是为了减少上下文切换的开销时间,提高性能,但是并不是线程越多越好;

C++11新标准中,C++语言本身增加了多线程的支持,这意味着代码可移植(跨平台)。

C++多线程基础学习笔记(一)的更多相关文章

  1. C++多线程基础学习笔记(四)

    一.创建多个子线程 前面三章讲的例子都是只有一个子线程和主线程,然而实际中有多个子线程.那么下面介绍如何创建多个子线程. #include <iostream> #include < ...

  2. C++多线程基础学习笔记(十)

    一.Windows临界区的基本用法 CRITICAL_SECTION my_winsc;              //定义一个Windows的临界区,相当于一个mutex变量 InitializeC ...

  3. C++多线程基础学习笔记(九)

    一.std::atomic续谈 上一章说到std::atomic是针对一个变量的,这里补充一下针对的变量操作一般是++,+=,--,&=等等运算 .以下这种不可取:a=a+1; 二.std:: ...

  4. C++多线程基础学习笔记(八)

    shared_futrue和futrue_status的用法 shared_futrue是一个类模板,类似于futrue,不同的是它的成员函数get()可以使用多次,因为是复制数据,而futrue的g ...

  5. C++多线程基础学习笔记(七)

    一.std::async和std::future的用法 std::async是一个函数模板,std::future是一个类模板 #include <iostream> #include & ...

  6. C++多线程基础学习笔记(六)

    condition_variable.wait.notifiy_one.notify_all的使用方式 condition_variable:条件变量 wait:等待被唤醒 notify_one:随机 ...

  7. C++多线程基础学习笔记(五)

    一.互斥量 1.1 互斥量的基本概念 简单来说,一个锁就是一个互斥量,既然是锁,就有两种状态:加锁和解锁,通过加锁>>>操作共享数据>>>解锁的方式,实现保护共享数 ...

  8. C++多线程基础学习笔记(三)

    一.detach()大坑 上一篇随笔(二)中提到detach()是用来分离主线程和子线程的,那么需要考虑一个问题,就是如果主线程跑完了,主线程中定义的变量就会被销毁(释放内存),这时回收变量仍作为参数 ...

  9. C++多线程基础学习笔记(二)

    先总结延申以下前面(一)所讲的内容. 主线程从main()函数开始执行,我们创建的线程也需要一个函数作为入口开始执行,所以第一步先初始化函数. 整个进程是否执行完毕的标志是主线程是否执行完毕,一般情况 ...

随机推荐

  1. [SCOI2009]windy数 代码 (对应数位dp入门)

    Code1 (DP版) #include<bits/stdc++.h> #define in(i) (i=read()) using namespace std; int read() { ...

  2. k8s集群节点更换ip 或者 k8s集群添加新节点

    1.需求情景:机房网络调整,突然要回收我k8s集群上一台node节点机器的ip,并调予新的ip到这台机器上,所以有了k8s集群节点更换ip一说:同时,k8s集群节点更换ip也相当于k8s集群添加新节点 ...

  3. java中MD5函数

    import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5U ...

  4. [题解] [SCOI2010] 生成字符串

    题面 题解 考虑到直接求合法方案不好求, 我们转化为用总方案减去不合法方案 总方案就是\(\binom{n+m}{m}\), 即在\(n+m\)个位置中放\(n\)个数 我们将初始的空序列看做\((0 ...

  5. Go 结构体与初始化

    Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型. 结构体是复合类型,当需要定义类型,它由一系列属性组成,每个属性都有自己的类型和值的时候,就应该使用结构体,它把数据聚集在 ...

  6. phpstorm 比较修改过的代码 version control

  7. laravel查询构造器DB还是ORM,这两者有什么区别,各该用在什么场景中

    解答一: 我们所有操作都是走的orm,因为操作简单 直观明了 好维护,性能是低一些 但还没有多致命,真有并发需要优化了 用DB也不一定能解决问题.还是要了解orm每个方法的意思,不然你可能一不小心就会 ...

  8. koa 路由、视图模块化(二)

    1.项目目录 2.路由 根目录/routes/index.js -- 首页 const router = require('koa-router')(); router.get('/', async ...

  9. 对opencv读取的图片进行像素调整(1080, 1920) 1.cv2.VideoCapture(构造图片读取) 2.cv2.nameWindow(构建视频显示的窗口) 3.cv2.setWindowProperty(设置图片窗口的像素) 4.video_capture(对图片像素进行设置)

    1. cv2.VideoCapture(0) #构建视频抓捕器 参数说明:0表示需要启动的摄像头,这里也可以写视频的路径 2. cv2.nameWindow(name, cv2.WINDOW_NORM ...

  10. leetcode1282 用户分组

    class Solution { public: vector<vector<int>> groupThePeople(vector<int>& group ...