首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
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("所有操作完成")
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user