您的位置 首页 golang

Golang sync.Cond应用

在Go语言中sync.Cond代表条件变量,主要作用就是获取锁之后,wait()方法会等待一个通知,来进行下一步锁释放等操作,以此控制锁合适释放,释放频率。需要配置锁才能有用c := sync.NewCond(&sync.RWMutex{})。通常项目中会结合sync.WaitGroup一起用,用来控制并发频率。

结构体 定义:

type Cond struct {

noCopy noCopy

L Locker //锁

notify notifyList //通知列表,调用Wait()方法的routine会被放入list中,每次唤醒,从这里取出

checker copyChecker

}

Signal ()//唤醒在Wait的routine中的一个

Broadcast ()//唤醒所有等待的

示例:

package main

import (

“fmt”

“sync”

“time”

)

var Lock er = new(sync.Mutex)

var cond = sync.NewCond(locker)

func test(x int) {

cond.L.Lock() //获取锁

cond.Wait()//等待通知 暂时阻塞

fmt.Println(x)

time.Sleep(time.Second * 1)

cond.L.Unlock()//释放锁

}

func main() {

for i := 0; i < 10; i++ {

go test(i)

}

fmt.Println(“预备”)

time.Sleep(time.Second * 1)

fmt.Println(“砰!”)

cond.Signal() // 下发一个通知给已经获取锁的goroutine

time.Sleep(time.Second * 1)

cond.Signal()// 1秒之后 下发一个通知给已经获取锁的goroutine

time.Sleep(time.Second * 5)

cond.Broadcast()//5秒之后 下发广播给所有等待的goroutine

time.Sleep(time.Second * 10)

}

执行结果:

预备

砰!

1

5

2

4

6

3

0

7

8

9

更多内容请关注每日编程,每天进步一点。

文章来源:智云一二三科技

文章标题:Golang sync.Cond应用

文章地址:https://www.zhihuclub.com/99643.shtml

关于作者: 智云科技

热门文章

网站地图