美文网首页
golang使用ring(环形结构)作为缓冲区

golang使用ring(环形结构)作为缓冲区

作者: authur_Wong | 来源:发表于2022-01-04 11:11 被阅读0次

    声明指定大小的ring作为缓存区大小,一边写缓冲区,一边消费缓冲区,若无数据则等待

    package main
    
    import (
        "container/ring"
        "fmt"
        "time"
    )
    
    func main() {
        r := ring.New(10)
        cursor := r // 声明一个游标来消费
        fmt.Println(r.Len()) // 打印缓存区大小
        // 缓冲区塞入数据
        go func() {
            for i := 0; i < 100; i++ {
                if r.Value == nil {
                    fmt.Println("往缓存区塞入,", i)
                    r.Value = i
                    r = r.Next()
                } else {
                    fmt.Println("缓存区阻塞,等待消费,", r.Value)
                }
                time.Sleep(2 * time.Second)
            }
        }()
    
        // 消费缓冲区
        for {
            time.Sleep(2 * time.Second)
            if cursor.Value != nil {
                fmt.Println("缓存数据: 消费成功。", cursor.Value)
                cursor.Value = nil
                cursor = cursor.Next()
            } else {
                fmt.Println("缓存数据: 等待塞入")
            }
        }
    
    }
    
    

    执行结果:

    go run main.go
    10
    往圈里塞入 0
    往圈里塞入 1
    消费圈: 成功  0
    往圈里塞入 2
    消费圈: 成功  1
    消费圈: 成功  2
    往圈里塞入 3
    往圈里塞入 4
    ...
    

    相关文章

      网友评论

          本文标题:golang使用ring(环形结构)作为缓冲区

          本文链接:https://www.haomeiwen.com/subject/tgjqcrtx.html