• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Go语言实现互斥锁、随机数、time、List

    Go语言实现互斥锁、随机数、time、List

    import (
      "container/list"
      "fmt"
      "math/rand" //备注2:随机数的包
      "sync" //备注1:异步任务的包
      "time"
    )
    
    type INFO struct {
      lock sync.Mutex  //备注1:异步锁
      Name string
      Time int64
    }
    
    var List *list.List = list.New() //备注3:初始化List变量
    
    func main() {
      var Info INFO
      go func() {
        for i := 0; i  5; i++ {
          time.Sleep(time.Duration(1e9 * int64(rand.Intn(5))))//备注2:随机数rand.Intn(5)---> 1e9为科学计数法,1 * 10的9次方
          Info.lock.Lock()//备注1:上锁
          Info.Name = fmt.Sprint("Name", i) //备注: Sprint采用默认格式将其参数格式化,串联所有输出生成并返回一个字符串。如果两个相邻的参数都不是字符串,会在它们的输出之间添加空格
          Info.Time = time.Now().Unix() + 3
          Info.lock.Unlock()//备注1:解锁
          List.PushBack(Info)//备注3:List表达式调用
        }
      }()
      go Getgoods()
      select {}
    }
    func Getgoods() {
      for {
        time.Sleep(1e8)
        for List.Len() > 0 {//备注3:List对象的使用
          N, T := List.Remove(List.Front()).(INFO).name() //备注3:List对象的使用和value.(type)的妙用
          now := time.Now().Unix() //备注4:获取当前日期转换后的时间戳
          if T-now = 0 {
            fmt.Println(N, T, now)
            continue
          }
          time.Sleep(time.Duration((T - now) * 1e9))
          fmt.Println(N, T, now)
        }
      }
    }
    
    func (i INFO) name() (string, int64) {
      return i.Name, i.Time
    }

    再给大家分享一个互斥锁的实例代码

    package main
     
    import (
      "fmt"
      "runtime"
      "sync"
    )
     
    var (
      counter int
      wg sync.WaitGroup
      mutex sync.Mutex
    )
     
    func main() {
      wg.Add(2)
       
      fmt.Println("Create Goroutines")
      go incCounter(1)
      go incCounter(2)
       
      fmt.Println("Waiting To Finish")
      wg.Wait()
       
      fmt.Println("Final Counter:", counter)
    }
     
    func incCounter(id int) {
      defer wg.Done()
      for count := 0; count  2; count++ {
        mutex.Lock()
        {
          value := counter
          runtime.Gosched()
          value++
          counter = value
        }
        mutex.Unlock()
      }
    }

    您可能感兴趣的文章:
    • Go语言range关键字循环时的坑
    • Go语言中http和mysql的实现代码
    • go语言中int和byte转换方式
    • Go语言中的字符串处理方法示例详解
    • Go语言中多字节字符的处理方法详解
    • Go语言中 Channel 详解
    • go语言中strings包的用法汇总
    • Go语言的JSON处理详解
    • Go语言的文件操作代码汇总
    • Golang数组的传递详解
    上一篇:Golang获取当前时间代码
    下一篇:golang实现简易的分布式系统方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Go语言实现互斥锁、随机数、time、List 语言,实现,互斥,锁,随机数,