2018.1.24 C++进程线程

线程

概念:进程是一个正在执行的程序,是向cpu申请资源的,进程之间数据相互独立,一个进程至少有一个线程
           
            线程是进程中的单一的顺序控制流程也可以叫做最小控制单元,线程是进程中执行单元,开启一个线程              比开启一个进程更加节省资源
    多线程是多任务处理的一种特殊形式,多任务处理允许电脑同时运行两个或两个以上的程序。一般情况下,        两种类型的多任务处理:基于进程和基于线程
    多线程程序包含可以同时运行的两个或多个部分。这样程序中的每个部分称为一个线程,每个线程定义了一       个单独的路径;

    基于进程的多任务处理是程序的并发执行;
    基于线程的多任务处理是同一程序的片段的并发执行;

线程的优点:
    1、创建一个新线程的代价要你创建一个进程小得多
    2、与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少的多;
    3、线程占用的资源要比进程少得多
    4、能充分利用多处理器的可并行数量
    5、在等待慢速I/O操作姐忽视的同时,程序可执行其他的计算任务;
    6、计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现
    7、I/O操作密集型应用,为了提高性能,将I/O操作重叠,线程可以同时等待不同的I/O操作;

线程的缺点:
    1、性能损失
    2、健壮性降低:编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者共享了不该共享的变量而造成不良影响的可能性是很大的,换句话说线程之间是缺乏保护的;
    3、缺乏访问控制:进程是访问控制的基本粒度,在一个线程中调用某些OS函数会对整个进程造成影响;
    4、编写难度提高:编写与调试一个多线程程序比单线程程序困难的多。

C++11 thread是近年来新开发出的一个版本
    Join();让主线程等待 阻塞
    Detach();非阻塞

死锁:例如有两个线程,线程A,线程B,资源A,资源B,线程A占用资源A,线程B资源资源B,线程A等待             线程B释放B资源,线程B等待线程A释放A资源,在这样的情况下就会造成死锁;
为了防止死锁这种情况的发生,就要利用锁
1、mutex
    mutex的头文件是mutex
    #include<mutex>
    mut.lock();
    要执行的程序
    mut.unlock();
2、lock_guard
3、unique_lock
4、lock()可以对以上三种锁进行自动管理,通过一些内部的算法进行 管理







猜你喜欢

转载自blog.csdn.net/error0_dameng/article/details/79176638