休眠排序

package main

import (
    "fmt"
    "time"
)

// 适用于多线程和分布式环境下
var flag bool
var container chan bool
var count int

func main() {
    var arr []int = []int{16, 8, 1, 24, 30}
    flag = true                    //标识区分
    container = make(chan bool, 5) //5个管道
    for i := 0; i < len(arr); i++ {
        go tosleep(arr[i])
    }

    go listen(len(arr))

    for flag {
        time.Sleep(1 * time.Second)
    }
}

func listen(size int) {
    for flag {
        select {
        case <-container:
            count++            // 计数器
            if count >= size { // 等待五个数据采集完成,就退出
                flag = false
                break
            }
        }

    }
}

func tosleep(data int) {
    time.Sleep(time.Duration(data) * time.Microsecond * 1000)
    fmt.Println("sleep", data)
    container <- true //管道输入ok
}


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容