package main import ( "fmt" "sync" "time" ) var ( config string // 共享配置(读多写少) rwmu sync.RWMutex // 读写锁 wg2 sync.WaitGroup ) // 读操作:使用读锁(允许多个并发) func readConfig(readerID int) { defer wg2.Done() rwmu.RLock() // 加读锁 defer rwmu.RUnlock() // 释放读锁 // 模拟读操作耗时 time.Sleep(100 * time.Millisecond) fmt.Printf("读者%d: 读取配置=%s\n", readerID, config) } // 写操作:使用写锁(独占) func writeConfig(writerID int, newConfig string) { defer wg2.Done() rwmu.Lock() // 加写锁 defer rwmu.Unlock() // 释放写锁 // 模拟写操作耗时 time.Sleep(300 * time.Millisecond) config = newConfig fmt.Printf("写者%d: 更新配置=%s\n", writerID, config) } func main() { config = "初始配置" // 启动10个读goroutine(并发执行) for i := 0; i < 10; i++ { wg2.Add(1) go readConfig(i) } // 启动2个写goroutine(串行执行,且阻塞读) for i := 0; i < 2; i++ { wg2.Add(1) go writeConfig(i, fmt.Sprintf("新配置%d", i+1)) } wg2.Wait() fmt.Println("所有操作完成") }