美文网首页
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