00:00
好,到这里呢,我们介绍了cur里面的两个锁了,那么一个呢是interpretise MU,可同入所,那么还有呢,是interpretise SIM for MU,好,当然这句话呢,好像写错了,对吧,它去掉这两个单词。好,那么然后呢,我们再来去看第三个所啊,就是pro啊,Read write m,那么这个的话呢,是什么呢?是可重入的,可重入的读写所。哎,读写所,那么读写所呢,我们都知道它什么特点呢?哎,就是读和读是可以并发的,那么让读写呢是不可以并发的,那么写和写呢也是不可以并发的啊接下来呢,我们就去玩一下K里面的读写所。那么Q上面读写水啊,跟我们red读写锁呢,是非常类似的。好,我们可以去参照之前那个读写锁呀,来去玩一下Q读写锁啊。
01:02
那么总之来说的话呢,其实大部分都是一样的,我文法也是差不多的,但是有一点有有一点细节不一样啊好,我们可以呢,把之前这个读写所呀拷贝一下,让它放在我们的啊这个下面去啊,放好之后呀,然后呢,再稍微给它改一改,比如说路径给它改成呃ZK这样一个路径。好,那么这应该是读写锁那个啊,这是拷贝错了,把这个删掉,那读写所写索已经拷背过来了,那读所呢,没有拷背过来也能拷贝过来,放在这个位置。啊,那么一个加一个啊ZK路径。那么然后呢,我们把这个方法啊也改一下,那么改成这个ZK就可以了,那么对应的这个service里面也改成ZK嘛。那么然后这个地方呢,也去加上这个VK,然后呢,把下面这个service啊,也改成text v k right。那么然后我们这个反应结果及字符串,咱可以给它改成。
02:02
嗯,测试这是读锁好,那我们下面这个地方呢,再给它改成测试写锁好,那么咱这个改改好之后呀,你可以创建对应的service的方法了。啊,这个呢也是一样,我们得给它创建出来,那么创建好之后呀,我们看这个读所,首先我们要以初始化一个读写所对象啊,咱们就需要去new一个,那么inter process process啊,Read rightlo。那么在K里面,它所有的锁的玩法几乎都是一样的,那你直接去new就可以了。那么然后呢,在你用的过程中啊,它里面的参数也是差不多的,那比如说第一个参数都是cur from work这个客户端对象,那我们直接呢给它。整进来,那么然后还有一个基础路径,嗯,By pass,那我们也可以指定一下是K,然后杠啊,I w I lock,好,最终返回的啊,就是一个读写错对象了。
03:05
好的,你命为read write lock。那么然后呢,我这个是测试读锁的,所以呢,我应该是read redlo点啊,然后是redlo点,然后呢,A qui就可以获取锁了,那么然后通过这个a que可以获取锁,通过release呢,咱可以去释放锁啊。那比如说呢,我们可以通过它你获取数。那么然后呢,将来啊,在这个下面啊,这个地方,你可以通过readlo点上release的一个释放锁。好,那我们这的话呢,咱们就不去手动释放缩了啊,我让他去自动释放缩多长时间呢?啊,还是跟以前release里面是一样的,比如说就十秒钟能自动释放,然后呢,单位啊是time unit six啊以秒为单位,以秒为单位。那我们呢,可以来一个try catch有异常呢,你就直接给他处理一下。那么然后呢,在这个写索里面呢,我们也是类似的。
04:00
那么你读写所得么,这个路径那么肯定是要一样啊,那不然的话呢,咱是控制不住的啊,咱把它呢,给它拷背过来。那么然后在这个里面呢,我们就可以通过read rightlo,点上rightlo.a queer可以获取锁。那么然后呢,我们这个地方呢,要解锁也是一样的啊,哎,我们这应该是writeout啊,那解锁呢,也通过release解锁。那我这呢也不解锁了,比如我也是锁一个十秒钟的时间,那么来一个十是time unit啊sentence,那么有异常我们也可以来一个try catch啊,给它处理一下啊。啊take好,那么呢,这样的话呢,那两个方法都已经写好了。那么下好之后呢,我们来给重新启动一下咱这两个服务。那么咱们在浏览器中呢,来测试一下我们的读写锁,那我就可以呢,把这个路径呢,稍微拷贝一下,可能是放在这里来,那我们的路径呢,应该是这样的一个路径啊,咱可以把啊controltrl这个路径拷贝一下,应该是test CK read readlo,它放在这个地方。
05:07
那么然后再把这个东西呢,它copy背一下,然后放在这个里面去,好,我们这个呢,来测试right right look。好,那我这里呢,启动啊,都已经启动成功了,那我现在去访问这个毒索去看一看啊,那我去访问毒索走,哎访问成功,那我这里呢呢,我刷新刷新刷新可以并发的啊,那么此时我来你访问写索会怎么样呢?我就刷新怎么样,那么写索呢,会在这里刷刷刷刷一会。啊,还会发一会儿啊。你这只十秒钟了。啊,其实呢,等了很长时间。那我再刷一下它会怎么样呢?那它又是它会等十秒钟啊。再等十秒钟。今天此时呢,我们也等十秒钟。啊,每次呢,都等十秒钟啊,OK,那么写和写可以并发吗?那你读完了之后你立马去写,哎,我能去写吗?也写不了啊对吧?哎,那我写完了之后我立马就读会可不可以呢?哎,你发现了你我这段写完了,我读完之后立马就写,发现不再写。
06:14
但是我写完了立马去读,哎,好像可以访问成功,因为人家我这里写的时候,写完之后我立马去读,哎,好像可以访问成功,那这是为什么呢?啊,这是因为啊我们的鞋锁呢,它其实是会自动阻塞的啊。会自动阻塞的,呃,如果我的线索没有释放的情况下,那么咱们的这个浏览器啊,会一直在这里阻塞着。啊,这是K读写锁里面写索的一个特征啊,它写索特征是什么呢?就是会阻塞我们的请求,只有当写索释放掉了之后,啊,那我们这个请求呢,才会结束。那比如说呢,我这段已经很长时间没有去访问这个写锁了,没没有访问这个读写锁了啊,读索和线索都没有访问过,那我这一刷新一发现它依然会阻塞个十秒钟,为什么呢?就因为他自己在阻塞自己。
07:09
那请求的话呢,我已经呃请求完了可能,但是由于我写索密有释放十秒钟才才释放,那他会刷一个十秒钟,等释放掉了请求才算才算结束啊啊这组keep读写所写索的一个特征了啊。那么当他刷新结束的时候,写索已经释放掉了,所以呢,给我们的感觉就是,哎,我这个写完之后呀,立马去读,哎,好像可以读啊,这样子就是给你这种感觉,那么是这样的吗?不是这样子的。啊,如果我这个的话呢,比如我写了,你看我写的过程中,我来读什么,能不能读呢?不能读它一定好,一定要等这个写索结束了啊,释放掉了,杀性完了释放掉了才能去读,那其实呢,还是啊会呃,相互不能不能并发的啊,相互不能并发的。那不管你是读完了之后写,还是写了之后来读,都是这样的啊。
08:01
好,那么它跟我们ready读写所呢,有点不太一样了。啊,那我这呢,读完了之后,我立马去写,那么写会怎么写会怎么样写会阻塞20秒钟。那水先呢,堵锁释方需要十秒钟,那十秒钟之后呢,我这个写索才能获一道锁,那写索回到锁之后呢,自己还会堵到十秒钟,所以呢,此时会堵塞20秒钟啊。OK,那我们这个的话呢,呃,这个呢就没法去验证了啊,那就不好验证了,那我们这呢就不去验证它了。好,那么读写所呀,咱们这里呢啊,就聊这么多啊,那么这个源码解读呀,我们也不打算去读了,因为呢,它并没有我们那个可重所啊,那个源码呢那么重要。啊,如果后续啊,我们有机会呢,做课程升级啊,啊,我们呢,可以去把这个源码呢给他补上。
我来说两句