美文网首页算法研究所
golang多协程顺序打印数字

golang多协程顺序打印数字

作者: 百里江山 | 来源:发表于2020-02-05 10:37 被阅读0次

    思路: 利用原子性操作,实现一个自旋锁.实现多协程顺序打印数字

    import (
        "fmt"
        "sync/atomic"
        "time"
    )
    
    //原子操作的变量.
    var Count int32
    //实现一个自旋锁操作.
    func SpinLock(i int32, fn func()) {
        for { //一个死循环.
            //查看原子操作的值.如果相等则执行函数
            if n := atomic.LoadInt32(&Count); n == i {
                fn()
                atomic.AddInt32(&Count, 1) //然后原子操作自增.
                break //一定要跳出循环.
            }
            time.Sleep(time.Nanosecond)
        }
    }
    func main() {
        for i := int32(0); i < 10; i ++ {
            go func(i int32) {
                fn := func() {
                    fmt.Println(i)
                }
                SpinLock(i, fn)
            }(i)
        }
           //当原子操作自增count = 10就结束操作, 也可以睡一会儿
        SpinLock(10, func() {})
    }
    

    相关文章

      网友评论

        本文标题:golang多协程顺序打印数字

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