线程的同步与互斥

来源:互联网 发布:云数据服务 编辑:程序博客网 时间:2024/05/23 01:26

什么是临界资源?
多个进程不能同时使用的资源叫做临界资源。

什么是临界区?
每个线程访问临界资源的那段代码称作临界区

操作系统在引入线程的并发性了以后,随即带来的就是资源共享和竞争的问题(因为线程共享进程所拥有的所有资源)。
举个例子,比如说,现在有两个线程(线程A和线程B),他们都需要用到打印机,如果这个打印机的资源不加以限制,那么在线程A打印还没有结束的时候线程B就抢占了资源打印线程B所要打印的内容。那么输出来线程A线程B打印出来的信息都是交错的。
这里写图片描述
由此可见,对临界资源的限制显得尤为的重要
这里写图片描述
这样的情况才是安全的,要么不打印,要么打印完。

所以,线程的同步与互斥机制是相当重要的。
什么是同步,什么是互斥?
线程当中为了共享资源而不出现差错,都有相互制约的关系
(1)间接相互制约。一个系统中的资源必定是多个线程所共享的,所谓的间接相互制约就是这个资源我占有的时候,其他的线程不能够获取到这个资源,必须等待资源释放后,才能够去竞争获取。
(2)直接相互制约。线程之间有时也是相互合作的,比如说线程A处理的数据提供给线程B,线程B有了线程A提供的数据才能工作,如果线程A还没有执行结束不能返回处理结果,那么线程B就会一直等待线程A结束,一直处于阻塞状态。
以上说的间接相互制约,可以称为是互斥。而直接相互制约可以称为是同步。对于互斥,还可以这样理解,线程A和线程B互斥的访问某一个资源的时候他们之间会产生一个顺序的问题—–要么线程A等待线程B操作完毕,要么线程B等待线程A操作完毕,这其实就是线程同步的问题。所以说,同步包括互斥,互斥也是一种特殊的同步。