Go语言中RWMutex如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。读写锁:是计算机程序的并发控制的一种同步机制,也称“共享-互斥锁”、多读者-单写者锁。读操作可并发重入,写操作是互斥的。主要适用的场景是:读多写少的业务场景。这种场景下如果每次读写都使用互斥锁那么整个效率就会变得很低。因为只是读的话并不需要互斥锁来锁住数据,只有写操作的时候需要互斥锁,而读写结合的时候,也是需要加锁的,不然的话会导致读的数据不一定是期望的。对于RWMutex的规则如下:1、可以随便读,多个goroutine同时读。2、写的时候,不能读也不能写。主要有下面四个API构成,读锁RLock,RUnlock,写锁Lock,Unlock。
对于读写锁来说,可以拆分成下面四种情况:1)读事件结束之后,写事件到达。2)读事件进行的过程中,写事件到达 。3)写事件完成之后,读事件到达。 4)写事件进行的过程中,读事件到达。5) 只有读的操作。6)只有写的操作。对于1)和3)来说,读事件和写事件是顺序执行的,不会出现相互影响的问题,我们主要来看下2),4), 5),6) 香港云主机两种情况的例子。2.1 例子1, 只有读的操作:
结果分析:通过运行的结果我们可以看出来,多个读操作不需要等到前一个读事件结束了,才去执行下一个读事件, 所以一旦我们在RLock和RUnlock之间修改共享变量num的时候,有两个协程5号和3号会读到相同的数值3。2.2 例子2, 只有写的操作:
结果分析:只有写操作的时候,每一次执行的结果num都是递增的,不会出现乱序,这就说明,写锁的加锁和解锁是互斥的,必需一个加锁和解锁结束了,才执行下一次。2.3 例子3,读事件进行的过程中,写事件到达:
结果分析:通过上面的输出结果,我们可以看出写事件的goroutinue在2号读数据的goroutinue结束就开始启动了,因为其他的读协程已经用读锁锁住了,所以在这些调用了读锁的这些读协程都释放了读锁之后,写锁才开始从 阻塞中被拿出来重新执行。2.4 例子4,写事件进行的过程中,读事件到达:
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注开发云行业资讯频道,感谢您对开发云的支持。
这篇文章将为大家详细讲解有关如何快捷利用Windows7截图工具,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。方法一:使用“Print 香港云主机”按键/“ctrl”+“Print”按键在键盘上按下“Print”按键,随后打…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。