前言
本系列博客主要记录有关嵌入式方面的面试重点知识,本系列已经更新的篇目有如下:
【本篇】1.2 并发,同步,异步,互斥,阻塞,非阻塞的理解
内容如有错误请在私信或者评论区及时指正,谢谢~
1.2 并发,同步,异步,互斥,阻塞,非阻塞的理解
1.2.1 什么是线程同步和互斥
线程同步:每个线程之间按预定的先后次序进行运行,协同、协助、互相配合。可以理解成“你说完,我再做”。有了线程同步,每个线程才不是自己做自己的事情,而是协同完成某件大事。
线程互斥:当有若干个线程访问同一块资源时,规定同一时间只有一个线程可以得到访问权,其它线程需要等占用资源者释放该资源才可以申请访问。线程互斥可以看成是一种特殊的线程同步。
总而言之,线程同步的关键在一顺序,线程之间要依靠某种顺序依次执行,例如吃饭与做饭这两个线程,必须得先做饭才能吃饭。对于线程互斥,是对一个有限的资源进行访问,而当一个线程访问之后,资源就被拿走了,其他线程无法访问,只能等到别的线程用完了,归还才能接着用。
1.2.2 线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗?
同步是个过程,阻塞是线程的一种状态。多个线程操作共享变量时可能会出现竞争。这时需要同步来防止两个以上的线程同时进入临界区,在这个过程中,后进入临界区的线程将阻塞,等待先进入的线程走出临界区。
线程同步不一定发生阻塞!!!线程同步的时候,需要协调推进速度,互相等待和互相唤醒会发生阻塞。而阻塞了一定是同步,后访问的等待获取资源,线程进入阻塞状态,借以实现多线程同步的过程。
1.2.3 并发,同步,异步,互斥,阻塞,非阻塞的理解
并发:在操作系统中,同个处理机上有多个程序同时运行即并发。并发可分为同步和互斥。
同步:同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。
异步:异步和同步是相对的,异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。
互斥:同一个资源同一时间只有一个访问者可以进行访问,其他访问者需要等前一个访问者访问结束才可以开始访问该资源。但互斥无法限制访问者对资源的访问顺序,即访问是无序的
阻塞和非阻塞是当进程在访问数据时,根据IO操作的就绪状态不同而采取的不同处理方式,比如主程序调用一个函数要读取一个文件的内容,阻塞方式下主程序会等到函数读取完再继续往下执行,非阻塞方式下,读取函数会立刻返回一个状态值给主程序,主程序不等待文件读取完就继续往下执行。