Go语言RWMutex的排队机制及对读写锁执行顺序的影响
Go语言中的
读写锁的内部排队机制会影响读写操作的执行顺序。本文通过示例代码分析其工作原理。
假设有三个协程并发执行
、
和
三个函数。直觉上,
和
(持有读锁)应该可以并发执行。然而,实际运行结果有时却显示它们是串行执行的。
这种现象源于
的排队机制。当一个写锁请求到来,而已经有读锁持有者时,该写锁请求会被加入等待队列。 重要的是,后续的读锁请求也会加入这个队列,排在等待中的写锁之后。
go语言参考手册 中文CHM版
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。本文给大家带来Go参考手册,需要的可以来下载! Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全 并行、有趣、开源 内存管理、v数组安全、编译
下载
立即学习
“
go语言免费学习笔记(深入)
”;
因此,如果
在
开始执行后不久请求写锁,那么
会先执行,之后
获得写锁并执行,最后
才能执行。这导致了看似串行而非并发的读操作执行顺序。 这并非
的bug,而是其设计导致的正常行为。 理解这个排队机制对于正确使用
至关重要。
RWMutexread1read2write1read1read2RWMutexwrite1read1read1write1read2RWMutexRWMutex