美文网首页算法研究所
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多协程顺序打印数字

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

  • 用多个协程顺序打印1-100

    这个题目要求有10个协程,每个协程打印0-9作为后缀的数字,总共打印100个

  • 浅谈GoLang协程

    GoLang协程 学习golang也有一段时间了,这里讲一下自己对golang协程的使用理解,golang很多人都...

  • Golang中超简单的协程同步工具

    Golang中超简单的协程同步工具 从需求出发 现在有如下需求:多协程处理一批数据,但需要所有协程都跑完才可以继续...

  • go 中 限制 goroutine 数量以及使用协程池

    需要使用协程池? Golang 开发需要协程池吗[https://www.zhihu.com/question/3...

  • golang中最大协程数的限制(线程)

    golang中最大协程数的限制 golang中有最大协程数的限制吗?如果有的话,是通过什么参数控制呢?还是通过每个...

  • Golang:协程

    协程(Goroutine)是与其他函数或方法同时运行的函数或方法。可以认为它是轻量级的线程。与线程相比,创建 Go...

  • 协程--golang

    协程(goroutine) 是轻量级的执行线程,由关键字go定义 一个例子 特别注意:如果没有time.Sleep...

  • Kotlin进阶-协程基础

    1.什么是协程 我们先来看以下程序 开启一个协程来打印“World!”,在主线程中打印“Hello,”,主线程打印...

  • 协程的使用

    Golang原生支持协程。只需要在前面加上go 就可以启动协程,比如说: package mainimport("...

网友评论

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

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