00:00
各位同学大家好,下面呢,我们继续来学习guc高并发编程,刚才呢,我们通过一个具体例子给大家演示了读写索的尽快操作,咱们是向麦克机油中放数据,然后从里边取数据,通过读写索的过程把这个例子我们做了一个实验。那下面呢,把读写所给各位做一个更深入的一个讲解,咱们就是进一步来去压这个读写锁。那首先关于这个读写所,咱们把它里边的相关的概念,我们先做一个总结,那这里边我来写一下什么叫读写所呢?咱们可以这么理解,就是一个资源,它可以被怎么样多个读的这个线程进行访问。或者说呢,它也可以被就是一个写的这个线程进行访问,因为咱们说过读索嘛,是什么,是不是叫共享所,写所是不是叫独占所,但是各位记住这句话啊。
01:11
在咱们的读写所里边,你不能同时存在这个读和写的这个线程,就是两个线程不能同时存在,也就是咱们通俗说的这个读写,它是这个。互斥的,然后它的读读是共享的,这是我们关于读写所的一个基本的概念,各位把这个给他要知道。然后这个说完之后呢,咱们下面把读写所我们进一步说明,下面呢,给各位同学我就来演示一下,或者来说明一下读写所它的一个演变的过程,就是它在什么情况下。出现了读写所,然后读写所本身也是有它的缺陷的,那我下面给各位同学咱们来做一个详细的这么一个演变的介绍,我在下面给大家画一下,比如说啊,咱们目前是。
02:11
这么一个过程,我这里边来画一下。首先我们看里边的第一部分低温是什么呢?比如咱们目前啊,这个操作中,就是咱们写第一咱们是一个叫无锁的一个状态,就是你现在这个操作中没有加速,如果说无锁状态情况下,然会发生什么样的现象?这各位同学应该都知道啊,单位发生是不是就是多线程去抢夺,或者说抢占你里边这个资源。写下啊,抢夺你的资源造成的过程中啊,是会特别的乱呀,就是这里边不同的抢,不同的操作,各种问题在里边都会产生,这是一种无所情况,所以针对这种问题呢,后来我们就在操作中是不是要加上索要,那我写第二个,第二种情况下,咱就对里我们做一个就是添加锁的这么一个操作,而添加锁里边咱们最早加锁是不是可以使用。
03:11
第一种方式,比如说我们这个的这种方式。包括咱们用那个叫re entra lock的方式,那我写一下啊,Re。T lock用它是不是做一个锁的这么一个添加,而这两种锁咱也说过,他们是不是都是独占领,就这两种所他们都是。独占的。什么叫独占,也就是说啊,我每次只能就是来一个操作,进行我们这个过程,咱通俗说那个only one嘛,每次只有一个操作,而在这过程中,里面的特点就是你做这个读读操作,它里边只能有一个线程或者一个操作,你做这个读写仍有一个,包括你做这个写写操作,它里边仍有一个。
04:03
当然这个过程中呢,里面有个缺陷,大家看这个独独操作,只只能有一个人进操作,这是只能来一个线程,那这种操作肯定有它的致命的缺陷,什么缺陷呢?给大家说一下啊,比如说你现在啊,你去这个网站中看这个新闻,那如果按照这种场景下,你看的话,别人是不是都不能看,只有你自己去看,而我们的这个读这过程,所有人是不是应该能共享。就是我可以在网上中看新闻,别人是不是也能看呀,但是目前咱们加上这种锁的方式,它是独占的,这个时候呢,这里边它是不能共享的,所以会造成这里边啊,咱们读读不能共享,是不是肯定是有这么一个致命缺陷,正确场景是咱们读读应该是可以共享的,所以针对这个问题呢,后来就出现了我们的第三种情况。写一下啊,第三个第三个是什么呢?就是咱们说这个读写所的这个情况,也就是叫这个re read write lock,那在里边快速写一下啊。
05:15
Read write。Lock,这个叫读写锁,所以后来咱们出现了读写锁,而读写所相对于我们普通这种独占所,它有什么特点呢?这各位应该很明确啊,它的独毒操作怎么样?是不是可以进行共享,而共享之后就会提升你这个操作这个性能,就是同时可以有多人来进行这个读的这个操作,这是我们说的这么一个特点啊,但是他的写写肯定还是一个这个操作,这是我们提到的读写所的这个特点。当然各位要明确啊,任何事情嘛,都不是万能的,他们都会有自己的缺陷,或者有他们的局限性,所以说咱看这个读写所本身也是有它的缺点的,或者说有它的缺陷的。
06:11
那各位同学可以想一下啊,你说这个读写所它有什么缺陷呢?或者说它有什么缺点吗?大家可以想一下它有什么缺点。这里边啊,给各位来说一下啊,首先它的第一个缺点是什么呢?就是它很容易造成你这个锁的这个饥饿的这种情况产生,很容易造成这个,而这里边也就是说我在写这个线程的时候,可能我会一直写,或者说我一直读啊,那就说一直读。然后你一直读的话,会造成它里边就没有这个写的这个扣动,这是我们可能造成一个叫锁的第个问题,那这问题是什么呢?举个例子啊,比如说各位同学啊,应该都做过这个地铁,如果说你没做过,你在高峰期可以去感受一下坐地铁一个场景,什么场景,比如现在啊,我们到某一个车站,假如说这个车站中呢,只有我一个人要下车,这个时候呢,恰好在车站外边有100个人要上车,你注意啊,我是不是就一个人下车,后面有100人要上车,那很容易造成什么问题。
07:22
我是不是下不去车呀,被100个人把我是不是又挤上车上来呀,这时我可能造成我就下不去了,所以会有这么个问题,这就叫做锁机个问题,他会一直堵,可能就一直没有写这个操作,这是会造成的第一个缺点,比如说刚才我举那个坐地铁例子,100个人上车,我就自己下车,造成就是我被100个人挤上车了,我就一直下不去了。这个啊是里边的第一个缺点,然后它还有第二个缺点,给各位说明啊,第二个缺点是什么呢?也就是现在你通过读写所操作的时候,你在读的时候,它是不能进行写操作的。
08:06
只有当你读完成之后,他才可以做这个写操作。或者说呢,这里边其实你写操作的时候,它是可以读的,比如说现在问题就出来了,比如说现在我一直读,是不是一直写不了,只有读完成之后是不是才可以写,所以咱们现在就面临的这么一个缺陷啊,所以任何事情呢,都有它的两面性,有它的优点,有它的局限性。所以现在通过这个过程呢,给大家就说明读写锁的一个演变过程,首先你知道啊,读写所这个特点包括第一种无所情况,第二个添加这个独占所,第三个加了读写锁,加了读写者之后,它的特点就是独读是可以共享的地高性能写,只能有一个人进行操作,而它造成缺点就是第一个容易造成所饥饿情况,第二会造成读的时候不能写,只有读完成之后才可以写。
09:05
其实这个过程说的简单点啊,就是一种所降级的过程,后面咱会提到,大家先知道里边这么一个基本特点。所以咱们现在就把读写所给各位做了一个更深入的分析,各位要掌握读写所的概念,包括它里面那个演变的这个过程,在这个我们就说到这里。
我来说两句