以下是一个示例,演示了两个协程对一个资源进行加1操作,使用互斥锁确保同一时间只有一个协程可以修改资源:
package main
import (
"fmt"
"sync"
"time"
)
var (
resource int // 共享资源
mutex sync.Mutex // 互斥锁
wg sync.WaitGroup // 等待组,用于等待所有协程执行完成
)
// 协程1:对共享资源加1
func increment() {
defer wg.Done()
// 锁定互斥锁,确保在修改资源时不被其他协程干扰
mutex.Lock()
defer mutex.Unlock()
// 修改共享资源
resource++
fmt.Println("Incremented resource to:", resource)
}
func main() {
// 设置初始资源值
resource = 0
// 启动两个协程来修改资源
wg.Add(2) // 增加等待组的计数
go increment()
go increment()
// 等待所有协程完成
wg.Wait()
fmt.Println("Final resource value:", resource)
}
在这个例子中,increment()
函数会对共享资源 resource
执行加1操作。在 main()
函数中,我们启动了两个协程来执行 increment()
函数。通过互斥锁 mutex
,我们确保了同一时间只有一个协程可以修改 resource
。