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

作者:ck_god 时间:2024-04-25 15:11:24 

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()
 }
}

来源:http://blog.51cto.com/13914991/2294034

标签:Go语言,互斥锁
0
投稿

猜你喜欢

  • ASP实现文件直接下载的代码

    2011-04-11 10:56:00
  • python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例

    2023-09-20 17:59:32
  • 初衷和结果

    2009-02-23 12:52:00
  • Python使用内置json模块解析json格式数据的方法

    2023-07-30 14:10:45
  • Python基于Django实现验证码登录功能

    2023-06-25 03:21:13
  • python禁用键鼠与提权代码实例

    2022-12-11 11:54:59
  • 使用 django orm 写 exists 条件过滤实例

    2022-01-20 02:42:48
  • 教你快速实现 MySQL查询结果的分页显示

    2008-11-27 16:17:00
  • Thinkphp5.0 框架的请求方式与响应方式分析

    2023-11-15 00:07:09
  • 基于python实现蓝牙通信代码实例

    2021-08-20 07:54:06
  • MySql数据库之alter表的SQL语句集合

    2024-01-21 05:31:24
  • 基于Python制作一个文件解压缩工具

    2021-01-10 08:00:13
  • Python 中 -m 的典型用法、原理解析与发展演变

    2023-07-09 17:11:40
  • vue中Npm run build 根据环境传递参数方法来打包不同域名

    2024-04-27 16:17:22
  • Python 代码实现列表的最小公倍数

    2021-08-11 05:15:24
  • 在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例

    2022-01-10 00:11:57
  • python使用多线程不断刷新网页的方法

    2022-10-03 09:19:26
  • Python基础学习之函数和代码复用详解

    2022-11-17 13:05:38
  • python 爬取腾讯视频评论的实现步骤

    2021-06-19 03:57:58
  • 没编程基础可以学python吗

    2023-11-27 23:12:49
  • asp之家 网络编程 m.aspxhome.com