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

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. 斐波那契数列的通项公式x+洛谷P2626x

    #include<cstdio> #include<iostream> #include<cmath> using namespace std; int main( ...

  2. 「美团 CodeM 初赛 Round A」试题泛做

    最长树链 树形DP.我们发现gcd是多少其实并不重要,只要不是1就好了,此外只要有一个公共的质数就好了.计f[i][j]表示i子树内含有j因子的最长链是多少.因为一个数的不同的质因子个数是log级别的 ...

  3. sql注入的基本小知识

    load_fie('') into outfile '' into dumpfile('') 堆叠注入 ;insert into liunx密码读取 /etc/passwd /etc/shadow W ...

  4. LeetCode---Bit Manipulation && Design

    **401. Binary Watch 思路:产生两个list分别代表小时和分钟,然后遍历 public List<String> readBinaryWatch(int num) { L ...

  5. mysql密码忘记更改

    忘记mysql的密码是一件不好的事,通常我们会把密码记住,或者是存在文档中,避免忘记,如果忘记了密码可以参照下方方法来更改,这个操作需要重启mysql. 首先我们在my.cnf文件中的[mysqld] ...

  6. CMD命令行管道命令

    一.什么是管道命令 管道命令能够将一个命令的执行结果经过筛选,只保留我们需要的信息. 如 dir 命令会显示目录下所有文件夹和文件,可以使用管道命令| findstr "" 将di ...

  7. 私有npm计划

    为什么要建立私有npm 提高代码复用程度,增加团队沉淀 剥离项目依赖,工程更加轻量 引用全量更新,支持版本降级 建立模块文档,降低上手难度 全员把关代码质量,无需重复测试 构建工具已成趋势,优化发布流 ...

  8. javascript之DOM四位的验证码简单实现

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 如何引用vue

    Vue.js 安装 https://www.runoob.com/vue2/vue-install.html 1.独立版本 我们可以在 Vue.js 的官网上直接下载 vue.min.js 并用 &l ...

  10. 把java项目打包成jar包并可以直接运行【我】

    首先创建一个maven的jar项目,然后代码写好后,在项目右键,导出: 选择java下面的可运行的jar文件: 下一步: 要注意的是: launch configuration 此选项是指定选中要导出 ...