线程控制复习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31860135/article/details/83824665

线程和进程的关系

①线程是计算机中独立运行的最小单位,运行时占用很少的系统资源(线程使用的数据通常只有寄存器数据以及程序运行时的堆栈)。
②线程亦可以看做操作系统分配CPU时间的基本单位。
③一个进程可以拥有多个线程。
④因为进程地址空间独立,而通常线程共享进程地址空间,所以切换线程要比切换进程快。
⑤同样,创建一个新的进程要比创建一个线程消耗的资源大。
⑥通信方面,进程由于独立地址空间,通信必须通过操作系统,而线程间是共享进程的地址空间的,可以不需要通过操作系统就可以达到通信的目的。
⑦可以充分发挥硬件的潜能,像多核cpu,完全可以让多个线程同时运行,大大提高程序运行的效率。
⑧改善程序结构,使程序设计变得简单,利于维护。
⑨每个线程都有唯一的一个线程号ID与之对应。
⑩堆栈、信号掩码、优先级、线程私有的存储空间。

互斥锁

互斥锁通过锁的机制来实现线程间的同步。通俗的讲,就是互斥锁可以让线程在处理某个重要任务时不会被其他线程打断或者是被切换线程直到运行结束锁被打开。这也是原子操作的概念。
举个例子,有A、B两个线程,A、B都对全局变量i做值操作,A使i+1返回,B使i*2返回,当运行一次后,i的值为多少,i初始为10,。可能最后返回的是11,也可能是20.为什么不是21、22呢?因为A、B两个线程同时拿到并对i做值处理,如果先处理A线程,返回了11,这个时候B线程也处理完了,并返回了20,这个时候11就被20覆盖了。
像上面这种情况就应该使用互斥锁。使用锁的目的是达到同步的作用,使共享资源在同一时间内,只有能有一个进程或者线程对他进行操作。

信号量

信号量是用来实现线程同步的。跟互斥锁的区别是,互斥锁用于线程互斥,即一个线程对某个资源访问的同时,别的线程不能访问。而信号量是用于线程同步的,一个线程完成某个动作后告诉别的线程,然后别的线程才可以执行某些操作
信号量很多时候其实已经实现了互斥。
另外,互斥锁只能加锁的线程释放锁,而信号量可以一个线程挂起,另外一个线程释放。这就使得信号量可以决定某些操作的发生顺序,像MFC等很多系统的事件响应机制就是信号量的实现。

猜你喜欢

转载自blog.csdn.net/qq_31860135/article/details/83824665
今日推荐